comparison src/share/vm/opto/doCall.cpp @ 12956:3213ba4d3dff

8024069: replace_in_map() should operate on parent maps Summary: type information gets lost because replace_in_map() doesn't update parent maps Reviewed-by: kvn, twisti
author roland
date Sat, 19 Oct 2013 12:16:43 +0200
parents 29bdcf12457c
children b2ee5dc63353
comparison
equal deleted inserted replaced
12955:252d541466ea 12956:3213ba4d3dff
493 493
494 // Bump method data counters (We profile *before* the call is made 494 // Bump method data counters (We profile *before* the call is made
495 // because exceptions don't return to the call site.) 495 // because exceptions don't return to the call site.)
496 profile_call(receiver); 496 profile_call(receiver);
497 497
498 JVMState* new_jvms = cg->generate(jvms); 498 JVMState* new_jvms = cg->generate(jvms, this);
499 if (new_jvms == NULL) { 499 if (new_jvms == NULL) {
500 // When inlining attempt fails (e.g., too many arguments), 500 // When inlining attempt fails (e.g., too many arguments),
501 // it may contaminate the current compile state, making it 501 // it may contaminate the current compile state, making it
502 // impossible to pull back and try again. Once we call 502 // impossible to pull back and try again. Once we call
503 // cg->generate(), we are committed. If it fails, the whole 503 // cg->generate(), we are committed. If it fails, the whole
507 // This can happen if a library intrinsic is available, but refuses 507 // This can happen if a library intrinsic is available, but refuses
508 // the call site, perhaps because it did not match a pattern the 508 // the call site, perhaps because it did not match a pattern the
509 // intrinsic was expecting to optimize. Should always be possible to 509 // intrinsic was expecting to optimize. Should always be possible to
510 // get a normal java call that may inline in that case 510 // get a normal java call that may inline in that case
511 cg = C->call_generator(cg->method(), vtable_index, call_does_dispatch, jvms, try_inline, prof_factor(), /* allow_intrinsics= */ false); 511 cg = C->call_generator(cg->method(), vtable_index, call_does_dispatch, jvms, try_inline, prof_factor(), /* allow_intrinsics= */ false);
512 if ((new_jvms = cg->generate(jvms)) == NULL) { 512 if ((new_jvms = cg->generate(jvms, this)) == NULL) {
513 guarantee(failing(), "call failed to generate: calls should work"); 513 guarantee(failing(), "call failed to generate: calls should work");
514 return; 514 return;
515 } 515 }
516 } 516 }
517 517