Mercurial > hg > graal-jvmci-8
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); }