Mon, 04 Feb 2013 11:30:37 +0100
8007144: Incremental inlining mistakes some call sites for dead ones and doesn't inline them
Summary: wrong detection for dead call sites.
Reviewed-by: kvn
src/share/vm/opto/callGenerator.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/callGenerator.cpp Mon Feb 04 10:28:39 2013 -0800 1.2 +++ b/src/share/vm/opto/callGenerator.cpp Mon Feb 04 11:30:37 2013 +0100 1.3 @@ -305,11 +305,13 @@ 1.4 void LateInlineCallGenerator::do_late_inline() { 1.5 // Can't inline it 1.6 if (call_node() == NULL || call_node()->outcnt() == 0 || 1.7 - call_node()->in(0) == NULL || call_node()->in(0)->is_top()) 1.8 + call_node()->in(0) == NULL || call_node()->in(0)->is_top()) { 1.9 return; 1.10 + } 1.11 1.12 + const TypeTuple *r = call_node()->tf()->domain(); 1.13 for (int i1 = 0; i1 < method()->arg_size(); i1++) { 1.14 - if (call_node()->in(TypeFunc::Parms + i1)->is_top()) { 1.15 + if (call_node()->in(TypeFunc::Parms + i1)->is_top() && r->field_at(TypeFunc::Parms + i1) != Type::HALF) { 1.16 assert(Compile::current()->inlining_incrementally(), "shouldn't happen during parsing"); 1.17 return; 1.18 }