changeset 13606:bb8ea5fb4a2d

MacroNode: apply SnippetFrameStateCleanPhase for nested MacroNodes
author Bernhard Urban <bernhard.urban@jku.at>
date Fri, 10 Jan 2014 21:22:08 +0100
parents 3def004aaa2d
children caf8c19e3506
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Fri Jan 10 21:18:57 2014 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Fri Jan 10 21:22:08 2014 +0100
@@ -38,6 +38,7 @@
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.phases.common.*;
 import com.oracle.graal.phases.tiers.*;
+import com.oracle.graal.replacements.*;
 
 public class MacroNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single {
 
@@ -86,6 +87,13 @@
     protected StructuredGraph getLoweredSubstitutionGraph(LoweringTool tool) {
         StructuredGraph methodSubstitution = tool.getReplacements().getMethodSubstitution(getTargetMethod());
         if (methodSubstitution != null) {
+            if (stateAfter() == null) {
+                /*
+                 * handles the case of a MacroNode inside a snippet used for another MacroNode
+                 * lowering
+                 */
+                new SnippetFrameStateCleanupPhase().apply(methodSubstitution);
+            }
             return lowerReplacement(methodSubstitution.copy(), tool);
         }
         return null;