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
|