# HG changeset patch # User Thomas Wuerthinger # Date 1425041645 -3600 # Node ID 98d7ecef365751a14ad7d05490a2e498d554308b # Parent 1ae2bbd0fc0785d4f3a56b52f648317997b9c1a2 New Truffle API method CompilerAsserts#partialEvaluationConstant(Object). diff -r 1ae2bbd0fc07 -r 98d7ecef3657 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Feb 27 12:49:59 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Feb 27 13:54:05 2015 +0100 @@ -190,6 +190,22 @@ return true; } }); + + r = new Registration(plugins, metaAccess, CompilerAsserts.class); + r.register1("partialEvaluationConstant", Object.class, new InvocationPlugin() { + public boolean apply(GraphBuilderContext builder, ValueNode value) { + ValueNode curValue = value; + if (curValue instanceof BoxNode) { + BoxNode boxNode = (BoxNode) curValue; + curValue = boxNode.getValue(); + } + if (curValue.isConstant()) { + return true; + } else { + throw builder.bailout("Partial evaluation did not reduce value to a constant, is a regular compiler node: " + curValue); + } + } + }); } public static void registerOptimizedCallTargetPlugins(MetaAccessProvider metaAccess, InvocationPlugins plugins) { diff -r 1ae2bbd0fc07 -r 98d7ecef3657 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerAsserts.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerAsserts.java Fri Feb 27 12:49:59 2015 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerAsserts.java Fri Feb 27 13:54:05 2015 +0100 @@ -64,4 +64,13 @@ neverPartOfCompilation("Value is not compilation constant"); } } + + /** + * Assertion that the corresponding value is reduced to a constant during the initial partial + * evaluation phase. + * + * @param value the value that must be constant during compilation + */ + public static void partialEvaluationConstant(Object value) { + } }