changeset 5674:b5a53a04913c

In inlining, refresh InlineInfo when making inline decision in case the receiver has a better stamp than when the original InlineInfo where created
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 21 Jun 2012 16:31:10 +0200
parents d695272dd80a
children 776366f3a41a
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InliningPhase.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoweringPhase.java
diffstat 2 files changed, 8 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InliningPhase.java	Thu Jun 21 16:29:56 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InliningPhase.java	Thu Jun 21 16:31:10 2012 +0200
@@ -91,12 +91,17 @@
         }
 
         while (!inlineCandidates.isEmpty() && graph.getNodeCount() < GraalOptions.MaximumDesiredSize) {
-            final InlineInfo info = inlineCandidates.remove();
+            InlineInfo candidate = inlineCandidates.remove();
+            if (!candidate.invoke.node().isAlive()) {
+                continue;
+            }
+            // refresh infos
+            final InlineInfo info = InliningUtil.getInlineInfo(candidate.invoke, candidate.level, runtime, assumptions, this, optimisticOpts);
 
             boolean inline = Debug.scope("InliningDecisions", new Callable<Boolean>() {
                 @Override
                 public Boolean call() throws Exception {
-                    return info.invoke.node().isAlive() && inliningPolicy.isWorthInlining(graph, info);
+                    return info != null && inliningPolicy.isWorthInlining(graph, info);
                 }
             });
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoweringPhase.java	Thu Jun 21 16:29:56 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoweringPhase.java	Thu Jun 21 16:31:10 2012 +0200
@@ -95,7 +95,7 @@
             if (graph.getNewNodes(mark).filter(FixedNode.class).isEmpty()) {
                 break;
             }
-            graph.verify();
+            assert graph.verify();
             processed.grow();
         }