changeset 6435:9ce24a27f035

fix for InliningUtil (dropped outer frame states while inlining)
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 25 Sep 2012 16:35:27 +0200
parents 58d7df6720ff
children 5395ecdfce8a
files graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java	Tue Sep 25 11:29:52 2012 +0200
+++ b/graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java	Tue Sep 25 16:35:27 2012 +0200
@@ -908,12 +908,16 @@
                         assert stateAtExceptionEdge == null;
                     }
                 } else {
-                    if (outerFrameState == null) {
-                        outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invoke.node().kind());
-                        outerFrameState.setDuringCall(true);
+                    // only handle the outermost frame states
+                    if (frameState.outerFrameState() == null) {
+                        assert frameState.method() == inlineGraph.method();
+                        if (outerFrameState == null) {
+                            outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invoke.node().kind());
+                            outerFrameState.setDuringCall(true);
+                        }
+                        frameState.setOuterFrameState(outerFrameState);
+                        frameState.setInliningIdentifier(identifier);
                     }
-                    frameState.setOuterFrameState(outerFrameState);
-                    frameState.setInliningIdentifier(identifier);
                 }
             }
         }