Mercurial > hg > graal-compiler
changeset 17305:679612367e1a
converted GeneratedNode to an interface to reduce annotation parsing when creating a NodeClass instance
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 01 Oct 2014 18:24:23 +0200 |
parents | acee76c5f8a4 |
children | 845e881ce054 |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java graal/com.oracle.graal.nodeinfo/src/com/oracle/graal/nodeinfo/GeneratedNode.java |
diffstat | 5 files changed, 29 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Wed Oct 01 16:18:19 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Wed Oct 01 18:24:23 2014 +0200 @@ -185,7 +185,7 @@ */ private static void checkClass(Class<?> c, MetaAccessProvider metaAccess) { if (Node.class.isAssignableFrom(c)) { - if (c.getAnnotation(GeneratedNode.class) == null) { + if (!GeneratedNode.class.isAssignableFrom(c)) { if (Modifier.isFinal(c.getModifiers())) { throw new AssertionError(String.format("Node subclass %s must not be final", c.getName())); }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Oct 01 16:18:19 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Oct 01 18:24:23 2014 +0200 @@ -170,8 +170,7 @@ public static final int NOT_ITERABLE = -1; public Node() { - assert USE_GENERATED_NODES == (getClass().getAnnotation(GeneratedNode.class) != null) : getClass() + " is not a generated Node class - forgot @" + NodeInfo.class.getSimpleName() + - " on class declaration?"; + assert USE_GENERATED_NODES == this instanceof GeneratedNode : getClass() + " is not a generated Node class - forgot @" + NodeInfo.class.getSimpleName() + " on class declaration?"; init(); }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Oct 01 16:18:19 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Oct 01 18:24:23 2014 +0200 @@ -88,9 +88,9 @@ try (TimerCloseable t = Init.start()) { value = (NodeClass) allClasses.get(key); if (value == null) { - GeneratedNode gen = getAnnotationTimed(c, GeneratedNode.class); - if (gen != null) { - Class<? extends Node> originalNodeClass = (Class<? extends Node>) gen.value(); + Class<?> superclass = c.getSuperclass(); + if (GeneratedNode.class.isAssignableFrom(c)) { + Class<? extends Node> originalNodeClass = (Class<? extends Node>) superclass; value = (NodeClass) allClasses.get(originalNodeClass); assert value != null; if (value.genClass == null) { @@ -99,7 +99,6 @@ assert value.genClass == c; } } else { - Class<?> superclass = c.getSuperclass(); NodeClass superNodeClass = null; if (superclass != NODE_CLASS) { // Ensure NodeClass for superclass exists @@ -261,7 +260,7 @@ * * <pre> * if (node.getNodeClass().is(BeginNode.class)) { ... } - * + * * // Due to generated Node classes, the test below * // is *not* the same as the test above: * if (node.getClass() == BeginNode.class) { ... } @@ -270,7 +269,7 @@ * @param nodeClass a {@linkplain GeneratedNode non-generated} {@link Node} class */ public boolean is(Class<? extends Node> nodeClass) { - assert nodeClass.getAnnotation(GeneratedNode.class) == null : "cannot test NodeClas against generated " + nodeClass; + assert !GeneratedNode.class.isAssignableFrom(nodeClass) : "cannot test NodeClass against generated " + nodeClass; return nodeClass == getClazz(); }
--- a/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java Wed Oct 01 16:18:19 2014 +0200 +++ b/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java Wed Oct 01 18:24:23 2014 +0200 @@ -327,9 +327,7 @@ if (!constructorsOnly) { DeclaredType generatedNode = (DeclaredType) getType(GeneratedNode.class); - CodeAnnotationMirror generatedNodeMirror = new CodeAnnotationMirror(generatedNode); - generatedNodeMirror.setElementValue(generatedNodeMirror.findExecutableElement("value"), new CodeAnnotationValue(node.asType())); - genClass.getAnnotationMirrors().add(generatedNodeMirror); + genClass.getImplements().add(generatedNode); scanFields(node);
--- a/graal/com.oracle.graal.nodeinfo/src/com/oracle/graal/nodeinfo/GeneratedNode.java Wed Oct 01 16:18:19 2014 +0200 +++ b/graal/com.oracle.graal.nodeinfo/src/com/oracle/graal/nodeinfo/GeneratedNode.java Wed Oct 01 18:24:23 2014 +0200 @@ -22,17 +22,27 @@ */ package com.oracle.graal.nodeinfo; -import java.lang.annotation.*; - /** - * Denotes a Node subclass generated on the basis of a {@link NodeInfo} annotation on a Node type. + * Marker for a Node class generated on the basis of a {@link NodeInfo} annotation on its super + * class. + * + * Testing whether a node class is generated: + * + * <pre> + * Class<? extends Node> c = ...; + * if (GeneratedNode.class.isAssignableFrom(c)) { ... } + * </pre> + * + * Since a generated node class always subclasses the node from which it is generated: + * + * <pre> + * if (GeneratedNode.class.isAssignableFrom(c)) { + * Class<?> original = c.getSuperclass(); + * } + * </pre> + * + * Note: This used to be an annotation but was converted to an interface to avoid annotation parsing + * when creating a NodeClass instance. */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface GeneratedNode { - - /** - * The Node class from which the annotated type was generated. - */ - Class<?> value(); +public interface GeneratedNode { }