src/share/vm/opto/buildOopMap.cpp

changeset 548
ba764ed4b6f2
parent 435
a61af66fc99e
child 631
d1605aabd0a1
     1.1 --- a/src/share/vm/opto/buildOopMap.cpp	Fri Apr 11 09:56:35 2008 -0400
     1.2 +++ b/src/share/vm/opto/buildOopMap.cpp	Sun Apr 13 17:43:42 2008 -0400
     1.3 @@ -315,6 +315,26 @@
     1.4          }
     1.5        }
     1.6  
     1.7 +    } else if( t->isa_narrowoop() ) {
     1.8 +      assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
     1.9 +      // Check for a legal reg name in the oopMap and bailout if it is not.
    1.10 +      if (!omap->legal_vm_reg_name(r)) {
    1.11 +        regalloc->C->record_method_not_compilable("illegal oopMap register name");
    1.12 +        continue;
    1.13 +      }
    1.14 +      if( mcall ) {
    1.15 +          // Outgoing argument GC mask responsibility belongs to the callee,
    1.16 +          // not the caller.  Inspect the inputs to the call, to see if
    1.17 +          // this live-range is one of them.
    1.18 +        uint cnt = mcall->tf()->domain()->cnt();
    1.19 +        uint j;
    1.20 +        for( j = TypeFunc::Parms; j < cnt; j++)
    1.21 +          if( mcall->in(j) == def )
    1.22 +            break;            // reaching def is an argument oop
    1.23 +        if( j < cnt )         // arg oops dont go in GC map
    1.24 +          continue;           // Continue on to the next register
    1.25 +      }
    1.26 +      omap->set_narrowoop(r);
    1.27      } else if( OptoReg::is_valid(_callees[reg])) { // callee-save?
    1.28        // It's a callee-save value
    1.29        assert( dup_check[_callees[reg]]==0, "trying to callee save same reg twice" );

mercurial