Mercurial > hg > graal-compiler
changeset 10690:a0309f88306c
Added truffle option to enable detailed rewrite messages. Disabled by default.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 10 Jul 2013 09:42:22 +0200 |
parents | 3ae117e62905 |
children | 77b83e903703 8c8e47cc101d |
files | graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java |
diffstat | 3 files changed, 29 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Jul 10 09:42:22 2013 +0200 @@ -34,6 +34,12 @@ public static boolean TraceRewrites = false; /** + * Enables the generation of detailed rewrite reasons. Enabling this may introduce some overhead + * for rewriting nodes. + */ + public static final boolean DetailedRewriteReasons = false; + + /** * Filters rewrites that do not contain the given string in the qualified name of the source or * target class hierarchy. */
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java Wed Jul 10 09:42:22 2013 +0200 @@ -40,6 +40,8 @@ */ public final class TruffleTypes { + public static final String OPTION_DETAILED_REWRITE_REASONS = "DetailedRewriteReasons"; + private final TypeMirror node; private final TypeMirror nodeArray; private final TypeMirror unexpectedValueException; @@ -53,6 +55,7 @@ private final TypeMirror compilerDirectives; private final TypeMirror compilerAsserts; private final DeclaredType slowPath; + private final DeclaredType truffleOptions; private final List<String> errors = new ArrayList<>(); @@ -70,6 +73,7 @@ nodeInfoAnnotation = getRequired(context, NodeInfo.class); nodeInfoKind = getRequired(context, NodeInfo.Kind.class); slowPath = getRequired(context, SlowPath.class); + truffleOptions = getRequired(context, TruffleOptions.class); } public DeclaredType getNodeInfoAnnotation() { @@ -140,6 +144,10 @@ return compilerAsserts; } + public DeclaredType getTruffleOptions() { + return truffleOptions; + } + public DeclaredType getSlowPath() { return slowPath; }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Wed Jul 10 09:42:22 2013 +0200 @@ -1113,12 +1113,22 @@ } } + private CodeTree truffleBooleanOption(CodeTreeBuilder parent, String name) { + CodeTreeBuilder builder = parent.create(); + builder.staticReference(getContext().getTruffleTypes().getTruffleOptions(), name); + return builder.getRoot(); + } + private Element createInfoMessage(NodeData node) { CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED, STATIC), getContext().getType(String.class), "createInfo0"); method.addParameter(new CodeVariableElement(getContext().getType(String.class), "message")); addInternalValueParameters(method, node.getGenericSpecialization(), false, false); CodeTreeBuilder builder = method.createBuilder(); + + builder.startIf().tree(truffleBooleanOption(builder, TruffleTypes.OPTION_DETAILED_REWRITE_REASONS)).end(); + builder.startBlock(); + builder.startStatement().string("StringBuilder builder = new StringBuilder(message)").end(); builder.startStatement().startCall("builder", "append").doubleQuote(" (").end().end(); @@ -1159,9 +1169,13 @@ } builder.startStatement().startCall("builder", "append").doubleQuote(")").end().end(); - builder.startReturn().string("builder.toString()").end(); + builder.end(); + builder.startElseBlock(); + builder.startReturn().string("message").end(); + builder.end(); + return method; }