8007144: Incremental inlining mistakes some call sites for dead ones and doesn't inline them

Mon, 04 Feb 2013 11:30:37 +0100

author
roland
date
Mon, 04 Feb 2013 11:30:37 +0100
changeset 4538
8bd61471a109
parent 4537
39901f2f1abe
child 4539
6a51fc70a15e

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      }

mercurial