changeset 10695:8c8e47cc101d

Truffle-DSL: fixed a bug in removal of the frame from the generated generic execute method.
author Christian Humer <christian.humer@gmail.com>
date Thu, 11 Jul 2013 01:55:54 +0200
parents a0309f88306c
children 062304c74353
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java
diffstat 3 files changed, 15 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Wed Jul 10 09:42:22 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Thu Jul 11 01:55:54 2013 +0200
@@ -1466,7 +1466,7 @@
 
             method.getAnnotationMirrors().add(new CodeAnnotationMirror(getContext().getTruffleTypes().getSlowPath()));
 
-            addInternalValueParameters(method, node.getGenericSpecialization(), false, false);
+            addInternalValueParameters(method, node.getGenericSpecialization(), node.needsFrame(), false);
             CodeTreeBuilder builder = method.createBuilder();
 
             String prefix = null;
@@ -2268,7 +2268,7 @@
             builder.end();
 
             builder.startReturn().startCall("super", EXECUTE_GENERIC_NAME);
-            addInternalValueParameterNames(builder, specialization, node.getGenericSpecialization(), null, false, true);
+            addInternalValueParameterNames(builder, specialization, node.getGenericSpecialization(), null, node.needsFrame(), true);
             builder.end().end();
 
             builder.end().startElseBlock();
@@ -2434,7 +2434,7 @@
                 emitEncounteredSynthetic(builder, specialization);
             } else if (specialization.isGeneric()) {
                 returnBuilder.startCall("super", EXECUTE_GENERIC_NAME);
-                addInternalValueParameterNames(returnBuilder, specialization, specialization, null, false, true);
+                addInternalValueParameterNames(returnBuilder, specialization, specialization, null, node.needsFrame(), true);
                 returnBuilder.end();
             } else {
                 returnBuilder.tree(createTemplateMethodCall(returnBuilder, null, specialization, specialization, null));
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeData.java	Wed Jul 10 09:42:22 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeData.java	Thu Jul 11 01:55:54 2013 +0200
@@ -78,6 +78,18 @@
         this.assumptions = splitSource.assumptions;
     }
 
+    public boolean needsFrame() {
+        for (SpecializationData specialization : specializations) {
+            if (!specialization.isReachable()) {
+                continue;
+            }
+            if (specialization.findParameter("frameValue") != null) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public int getPolymorphicDepth() {
         return polymorphicDepth;
     }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java	Wed Jul 10 09:42:22 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeParser.java	Thu Jul 11 01:55:54 2013 +0200
@@ -41,8 +41,6 @@
 
 public class NodeParser extends TemplateParser<NodeData> {
 
-    private static final String FRAME_VALUE = "frameValue";
-
     public static final List<Class<? extends Annotation>> ANNOTATIONS = Arrays.asList(Generic.class, TypeSystemReference.class, ShortCircuit.class, Specialization.class, SpecializationListener.class,
                     NodeContainer.class, NodeChild.class, NodeChildren.class, NodeId.class);
 
@@ -655,27 +653,6 @@
             }
         }
 
-        // remove frame parameter of generic if not needed
-        if (genericSpecialization != null) {
-            ActualParameter frame = genericSpecialization.findParameter(FRAME_VALUE);
-            if (frame != null) {
-                boolean frameUsed = false;
-                for (SpecializationData specialization : specializations) {
-                    if (!specialization.isReachable()) {
-                        continue;
-                    }
-                    frameUsed = specialization.findParameter(FRAME_VALUE) != null;
-                    if (frameUsed) {
-                        break;
-                    }
-                }
-
-                if (!frameUsed) {
-                    genericSpecialization.getParameters().remove(frame);
-                }
-            }
-        }
-
         if (node.getPolymorphicDepth() < 0) {
             node.setPolymorphicDepth(specializationCount - 1);
         }