< prev index next >

src/hotspot/share/opto/buildOopMap.cpp

Print this page

224 
225     // %%% C2 can use 2 OptoRegs when the physical register is only one 64bit
226     // register in that case we'll get an non-concrete register for the second
227     // half. We only need to tell the map the register once!
228     //
229     // However for the moment we disable this change and leave things as they
230     // were.
231 
232     VMReg r = OptoReg::as_VMReg(OptoReg::Name(reg), framesize, max_inarg_slot);
233 
234     if (false && r->is_reg() && !r->is_concrete()) {
235       continue;
236     }
237 
238     // See if dead (no reaching def).
239     Node *def = _defs[reg];     // Get reaching def
240     assert( def, "since live better have reaching def" );
241 
242     // Classify the reaching def as oop, derived, callee-save, dead, or other
243     const Type *t = def->bottom_type();
244     if( t->isa_oop_ptr() ) {    // Oop or derived?

245       assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
246 #ifdef _LP64
247       // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
248       // Make sure both are record from the same reaching def, but do not
249       // put both into the oopmap.
250       if( (reg&1) == 1 ) {      // High half of oop-pair?
251         assert( _defs[reg-1] == _defs[reg], "both halves from same reaching def" );
252         continue;               // Do not record high parts in oopmap
253       }
254 #endif
255 
256       // Check for a legal reg name in the oopMap and bailout if it is not.
257       if (!omap->legal_vm_reg_name(r)) {
258         regalloc->C->record_method_not_compilable("illegal oopMap register name");
259         continue;
260       }
261       if( t->is_ptr()->_offset == 0 ) { // Not derived?
262         if( mcall ) {
263           // Outgoing argument GC mask responsibility belongs to the callee,
264           // not the caller.  Inspect the inputs to the call, to see if

224 
225     // %%% C2 can use 2 OptoRegs when the physical register is only one 64bit
226     // register in that case we'll get an non-concrete register for the second
227     // half. We only need to tell the map the register once!
228     //
229     // However for the moment we disable this change and leave things as they
230     // were.
231 
232     VMReg r = OptoReg::as_VMReg(OptoReg::Name(reg), framesize, max_inarg_slot);
233 
234     if (false && r->is_reg() && !r->is_concrete()) {
235       continue;
236     }
237 
238     // See if dead (no reaching def).
239     Node *def = _defs[reg];     // Get reaching def
240     assert( def, "since live better have reaching def" );
241 
242     // Classify the reaching def as oop, derived, callee-save, dead, or other
243     const Type *t = def->bottom_type();
244     if( t->isa_oop_ptr() || // Oop or derived?
245        (C->do_stack_allocation() && t->isa_rawptr() && def->is_BoxLock())) {  // consider stack oops too
246       assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
247 #ifdef _LP64
248       // 64-bit pointers record oop-ishness on 2 aligned adjacent registers.
249       // Make sure both are record from the same reaching def, but do not
250       // put both into the oopmap.
251       if( (reg&1) == 1 ) {      // High half of oop-pair?
252         assert( _defs[reg-1] == _defs[reg], "both halves from same reaching def" );
253         continue;               // Do not record high parts in oopmap
254       }
255 #endif
256 
257       // Check for a legal reg name in the oopMap and bailout if it is not.
258       if (!omap->legal_vm_reg_name(r)) {
259         regalloc->C->record_method_not_compilable("illegal oopMap register name");
260         continue;
261       }
262       if( t->is_ptr()->_offset == 0 ) { // Not derived?
263         if( mcall ) {
264           // Outgoing argument GC mask responsibility belongs to the callee,
265           // not the caller.  Inspect the inputs to the call, to see if
< prev index next >