comparison src/share/vm/opto/parse1.cpp @ 1070:87b2fdd4bf98

6892079: live value must not be garbage failure after fix for 6854812 Reviewed-by: kvn
author never
date Wed, 11 Nov 2009 23:39:17 -0800
parents 3a2aa26bdc58
children
comparison
equal deleted inserted replaced
10:39a5dbd74d72 11:a4b9811ccaee
229 } 229 }
230 } 230 }
231 231
232 // Use the raw liveness computation to make sure that unexpected 232 // Use the raw liveness computation to make sure that unexpected
233 // values don't propagate into the OSR frame. 233 // values don't propagate into the OSR frame.
234 MethodLivenessResult live_locals = method()->raw_liveness_at_bci(osr_bci()); 234 MethodLivenessResult live_locals = method()->liveness_at_bci(osr_bci());
235 if (!live_locals.is_valid()) { 235 if (!live_locals.is_valid()) {
236 // Degenerate or breakpointed method. 236 // Degenerate or breakpointed method.
237 C->record_method_not_compilable("OSR in empty or breakpointed method"); 237 C->record_method_not_compilable("OSR in empty or breakpointed method");
238 return; 238 return;
239 } 239 }
240 MethodLivenessResult raw_live_locals = method()->raw_liveness_at_bci(osr_bci());
240 241
241 // Extract the needed locals from the interpreter frame. 242 // Extract the needed locals from the interpreter frame.
242 Node *locals_addr = basic_plus_adr(osr_buf, osr_buf, (max_locals-1)*wordSize); 243 Node *locals_addr = basic_plus_adr(osr_buf, osr_buf, (max_locals-1)*wordSize);
243 244
244 // find all the locals that the interpreter thinks contain live oops 245 // find all the locals that the interpreter thinks contain live oops
313 if (type->isa_oopptr() != NULL) { 314 if (type->isa_oopptr() != NULL) {
314 if (!live_oops.at(index)) { 315 if (!live_oops.at(index)) {
315 // skip type check for dead oops 316 // skip type check for dead oops
316 continue; 317 continue;
317 } 318 }
319 }
320 if (type->basic_type() == T_ADDRESS && !raw_live_locals.at(index)) {
321 // Skip type check for dead address locals
322 continue;
318 } 323 }
319 set_local(index, check_interpreter_type(l, type, bad_type_exit)); 324 set_local(index, check_interpreter_type(l, type, bad_type_exit));
320 } 325 }
321 326
322 for (index = 0; index < sp(); index++) { 327 for (index = 0; index < sp(); index++) {