# HG changeset patch # User Doug Simon # Date 1409162526 -7200 # Node ID a1cb03f6b606009094ca1bc6c3a822d020267065 # Parent a65b459ab270d269fe04509e80ce7125f2f5be77# Parent 74520179dda849085688a729043ddd0179d88d01 Merge. diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Wed Aug 27 20:02:06 2014 +0200 @@ -275,63 +275,63 @@ protected AMD64Arithmetic getOp(ValueNode operation, Access access) { Kind memoryKind = getMemoryKind(access); - if (operation.getClass() == IntegerAddNode.getGenClass()) { + if (operation.getNodeClass().is(IntegerAddNode.class)) { switch (memoryKind) { case Int: return IADD; case Long: return LADD; } - } else if (operation.getClass() == FloatAddNode.getGenClass()) { + } else if (operation.getNodeClass().is(FloatAddNode.class)) { switch (memoryKind) { case Float: return FADD; case Double: return DADD; } - } else if (operation.getClass() == AndNode.getGenClass()) { + } else if (operation.getNodeClass().is(AndNode.class)) { switch (memoryKind) { case Int: return IAND; case Long: return LAND; } - } else if (operation.getClass() == OrNode.getGenClass()) { + } else if (operation.getNodeClass().is(OrNode.class)) { switch (memoryKind) { case Int: return IOR; case Long: return LOR; } - } else if (operation.getClass() == XorNode.getGenClass()) { + } else if (operation.getNodeClass().is(XorNode.class)) { switch (memoryKind) { case Int: return IXOR; case Long: return LXOR; } - } else if (operation.getClass() == IntegerSubNode.getGenClass()) { + } else if (operation.getNodeClass().is(IntegerSubNode.class)) { switch (memoryKind) { case Int: return ISUB; case Long: return LSUB; } - } else if (operation.getClass() == FloatSubNode.getGenClass()) { + } else if (operation.getNodeClass().is(FloatSubNode.class)) { switch (memoryKind) { case Float: return FSUB; case Double: return DSUB; } - } else if (operation.getClass() == IntegerMulNode.getGenClass()) { + } else if (operation.getNodeClass().is(IntegerMulNode.class)) { switch (memoryKind) { case Int: return IMUL; case Long: return LMUL; } - } else if (operation.getClass() == FloatMulNode.getGenClass()) { + } else if (operation.getNodeClass().is(FloatMulNode.class)) { switch (memoryKind) { case Float: return FMUL; diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Aug 27 20:02:06 2014 +0200 @@ -94,7 +94,7 @@ private ValueNode currentInstruction; private ValueNode lastInstructionPrinted; // Debugging only - private Map, List> matchRules; + private Map> matchRules; public NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { this.gen = gen; @@ -277,7 +277,7 @@ continue; } // See if this node is the root of any MatchStatements - List statements = matchRules.get(node.getClass()); + List statements = matchRules.get(node.getNodeClass()); if (statements != null) { for (MatchStatement statement : statements) { if (statement.generate(this, index, node, nodes)) { diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchPattern.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchPattern.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchPattern.java Wed Aug 27 20:02:06 2014 +0200 @@ -185,7 +185,7 @@ } private Result matchType(ValueNode node) { - if (nodeClass != null && node.getClass() != nodeClass) { + if (nodeClass != null && node.getNodeClass() != NodeClass.get(nodeClass)) { return Result.WRONG_CLASS(node, this); } return Result.OK; diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchRuleRegistry.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchRuleRegistry.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchRuleRegistry.java Wed Aug 27 20:02:06 2014 +0200 @@ -79,7 +79,7 @@ return result; } - private static final HashMap, Map, List>> registry = new HashMap<>(); + private static final HashMap, Map>> registry = new HashMap<>(); /** * Collect all the {@link MatchStatement}s defined by the superclass chain of theClass. @@ -87,12 +87,12 @@ * @param theClass * @return the set of {@link MatchStatement}s applicable to theClass. */ - public synchronized static Map, List> lookup(Class theClass) { - Map, List> result = registry.get(theClass); + public synchronized static Map> lookup(Class theClass) { + Map> result = registry.get(theClass); if (result == null) { NodeClassLookup lookup = new DefaultNodeClassLookup(); - Map, List> rules = createRules(theClass, lookup); + Map> rules = createRules(theClass, lookup); registry.put(theClass, rules); assert registry.get(theClass) == rules; result = rules; @@ -100,7 +100,7 @@ if (LogVerbose.getValue()) { try (Scope s = Debug.scope("MatchComplexExpressions")) { Debug.log("Match rules for %s", theClass.getSimpleName()); - for (Entry, List> entry : result.entrySet()) { + for (Entry> entry : result.entrySet()) { Debug.log(" For node class: %s", entry.getKey()); for (MatchStatement statement : entry.getValue()) { Debug.log(" %s", statement.getPattern()); @@ -120,7 +120,7 @@ * This is a separate, public method so that external clients can create rules with a custom * lookup and without the default caching behavior. */ - public static Map, List> createRules(Class theClass, NodeClassLookup lookup) { + public static Map> createRules(Class theClass, NodeClassLookup lookup) { HashMap, MatchStatementSet> matchSets = new HashMap<>(); Iterable sl = Services.load(MatchStatementSet.class); for (MatchStatementSet rules : sl) { @@ -129,14 +129,14 @@ // Walk the class hierarchy collecting lists and merge them together. The subclass // rules are first which gives them preference over earlier rules. - Map, List> rules = new HashMap<>(); + Map> rules = new HashMap<>(); Class currentClass = theClass; do { MatchStatementSet matchSet = matchSets.get(currentClass); if (matchSet != null) { List statements = matchSet.statements(lookup); for (MatchStatement statement : statements) { - Class nodeClass = statement.getPattern().nodeClass(); + NodeClass nodeClass = NodeClass.get(statement.getPattern().nodeClass()); List current = rules.get(nodeClass); if (current == null) { current = new ArrayList<>(); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Aug 27 20:02:06 2014 +0200 @@ -56,7 +56,7 @@ @NodeInfo public abstract class Node implements Cloneable, Formattable { - public final static boolean USE_GENERATED_NODES = Boolean.getBoolean("graal.useGeneratedNodes"); + public final static boolean USE_GENERATED_NODES = Boolean.parseBoolean(System.getProperty("graal.useGeneratedNodes", "true")); static final int DELETED_ID_START = -1000000000; static final int INITIAL_ID = -1; diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Aug 27 20:02:06 2014 +0200 @@ -54,8 +54,7 @@ */ @SuppressWarnings("unchecked") public static NodeClass get(Class c) { - GeneratedNode gen = c.getAnnotation(GeneratedNode.class); - Class key = gen == null ? (Class) c : (Class) gen.value(); + Class key = (Class) c; NodeClass value = (NodeClass) allClasses.get(key); // The fact that {@link ConcurrentHashMap#put} and {@link ConcurrentHashMap#get} @@ -66,7 +65,14 @@ synchronized (GetNodeClassLock) { value = (NodeClass) allClasses.get(key); if (value == null) { - value = new NodeClass(key); + GeneratedNode gen = c.getAnnotation(GeneratedNode.class); + if (gen != null) { + Class genKey = (Class) gen.value(); + value = (NodeClass) allClasses.get(genKey); + assert value != null; + } else { + value = new NodeClass(key); + } Object old = allClasses.putIfAbsent(key, value); assert old == null : old + " " + key; } @@ -158,15 +164,12 @@ } String newNameTemplate = null; NodeInfo info = clazz.getAnnotation(NodeInfo.class); - if (info != null) { - if (!info.shortName().isEmpty()) { - newShortName = info.shortName(); - } - if (!info.nameTemplate().isEmpty()) { - newNameTemplate = info.nameTemplate(); - } - } else { - System.out.println("No NodeInfo for " + clazz); + assert info != null : "missing " + NodeInfo.class.getSimpleName() + " annotation on " + clazz; + if (!info.shortName().isEmpty()) { + newShortName = info.shortName(); + } + if (!info.nameTemplate().isEmpty()) { + newNameTemplate = info.nameTemplate(); } EnumSet newAllowedUsageTypes = EnumSet.noneOf(InputType.class); Class current = clazz; @@ -234,14 +237,12 @@ fieldTypes.putAll(scanner.fieldTypes); } - private boolean isNodeClassFor(Node n) { - if (Node.USE_GENERATED_NODES) { - GeneratedNode gen = n.getClass().getAnnotation(GeneratedNode.class); - assert gen != null; - return gen.value() == getClazz(); - } else { - return n.getNodeClass().getClazz() == n.getClass(); - } + /** + * Determines if a given {@link Node} class is described by the {@link NodeClass} object. + */ + public boolean is(Class nodeClass) { + assert nodeClass.getAnnotation(GeneratedNode.class) == null; + return nodeClass.equals(getClazz()); } public String shortName() { @@ -1214,7 +1215,7 @@ * @param newNode the node to which the inputs should be copied. */ public void copyInputs(Node node, Node newNode) { - assert isNodeClassFor(node) && isNodeClassFor(newNode); + assert node.getNodeClass() == this && newNode.getNodeClass() == this; int index = 0; while (index < directInputCount) { @@ -1236,7 +1237,7 @@ * @param newNode the node to which the successors should be copied. */ public void copySuccessors(Node node, Node newNode) { - assert isNodeClassFor(node) && isNodeClassFor(newNode); + assert node.getNodeClass() == this && newNode.getNodeClass() == this; int index = 0; while (index < directSuccessorCount) { @@ -1255,7 +1256,7 @@ } public boolean inputsEqual(Node node, Node other) { - assert isNodeClassFor(node) && isNodeClassFor(other); + assert node.getNodeClass() == this && other.getNodeClass() == this; int index = 0; while (index < directInputCount) { if (getNode(other, inputOffsets[index]) != getNode(node, inputOffsets[index])) { @@ -1274,7 +1275,7 @@ } public boolean successorsEqual(Node node, Node other) { - assert isNodeClassFor(node) && isNodeClassFor(other); + assert node.getNodeClass() == this && other.getNodeClass() == this; int index = 0; while (index < directSuccessorCount) { if (getNode(other, successorOffsets[index]) != getNode(node, successorOffsets[index])) { @@ -1293,7 +1294,7 @@ } public boolean inputContains(Node node, Node other) { - assert isNodeClassFor(node); + assert node.getNodeClass() == this; int index = 0; while (index < directInputCount) { @@ -1313,7 +1314,7 @@ } public boolean successorContains(Node node, Node other) { - assert isNodeClassFor(node); + assert node.getNodeClass() == this; int index = 0; while (index < directSuccessorCount) { diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Aug 27 20:02:06 2014 +0200 @@ -1334,7 +1334,7 @@ frameState.clearNonLiveLocals(currentBlock, liveness, false); } if (lastInstr instanceof StateSplit) { - if (lastInstr.getClass() == BeginNode.getGenClass()) { + if (lastInstr.getNodeClass().is(BeginNode.class)) { // BeginNodes do not need a frame state } else { StateSplit stateSplit = (StateSplit) lastInstr; diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -42,10 +42,6 @@ return USE_GENERATED_NODES ? new BeginNodeGen() : new BeginNode(); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? BeginNodeGen.class : BeginNode.class; - } - protected BeginNode() { super(StampFactory.forVoid()); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -30,10 +30,6 @@ return USE_GENERATED_NODES ? new EndNodeGen() : new EndNode(); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? EndNodeGen.class : EndNode.class; - } - EndNode() { } } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -220,7 +220,7 @@ do { BeginNode trueSucc = trueSuccessor(); BeginNode falseSucc = falseSuccessor(); - if (trueSucc.getClass() == BeginNode.getGenClass() && falseSucc.getClass() == BeginNode.getGenClass() && trueSucc.next() instanceof FixedWithNextNode && + if (trueSucc.getNodeClass().is(BeginNode.class) && falseSucc.getNodeClass().is(BeginNode.class) && trueSucc.next() instanceof FixedWithNextNode && falseSucc.next() instanceof FixedWithNextNode) { FixedWithNextNode trueNext = (FixedWithNextNode) trueSucc.next(); FixedWithNextNode falseNext = (FixedWithNextNode) falseSucc.next(); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -37,7 +37,7 @@ * The {@code InvokeNode} represents all kinds of method calls. */ @NodeInfo(nameTemplate = "Invoke#{p#targetMethod/s}", allowedUsageTypes = {InputType.Memory}) -public class InvokeNode extends AbstractMemoryCheckpoint implements Invoke, LIRLowerable, MemoryCheckpoint.Single, IterableNodeType { +public class InvokeNode extends AbstractMemoryCheckpoint implements Invoke, LIRLowerable, MemoryCheckpoint.Single { @Input(InputType.Extension) CallTargetNode callTarget; @OptionalInput(InputType.State) FrameState stateDuring; diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -43,10 +43,6 @@ return USE_GENERATED_NODES ? new MergeNodeGen() : new MergeNode(); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? MergeNodeGen.class : MergeNode.class; - } - protected MergeNode() { } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -39,10 +39,6 @@ return USE_GENERATED_NODES ? new AndNodeGen(x, y) : new AndNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? AndNodeGen.class : AndNode.class; - } - AndNode(ValueNode x, ValueNode y) { super(StampTool.and(x.stamp(), y.stamp()), x, y); assert x.stamp().isCompatible(y.stamp()); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -37,10 +37,6 @@ return USE_GENERATED_NODES ? new FloatAddNodeGen(x, y, isStrictFP) : new FloatAddNode(x, y, isStrictFP); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? FloatAddNodeGen.class : FloatAddNode.class; - } - protected FloatAddNode(ValueNode x, ValueNode y, boolean isStrictFP) { super(x.stamp().unrestricted(), x, y, isStrictFP); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -37,10 +37,6 @@ return USE_GENERATED_NODES ? new FloatMulNodeGen(x, y, isStrictFP) : new FloatMulNode(x, y, isStrictFP); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? FloatMulNodeGen.class : FloatMulNode.class; - } - protected FloatMulNode(ValueNode x, ValueNode y, boolean isStrictFP) { super(x.stamp().unrestricted(), x, y, isStrictFP); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -38,10 +38,6 @@ return USE_GENERATED_NODES ? new FloatSubNodeGen(x, y, isStrictFP) : new FloatSubNode(x, y, isStrictFP); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? FloatSubNodeGen.class : FloatSubNode.class; - } - protected FloatSubNode(ValueNode x, ValueNode y, boolean isStrictFP) { super(x.stamp().unrestricted(), x, y, isStrictFP); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -38,10 +38,6 @@ return USE_GENERATED_NODES ? new IntegerAddNodeGen(x, y) : new IntegerAddNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? IntegerAddNodeGen.class : IntegerAddNode.class; - } - protected IntegerAddNode(ValueNode x, ValueNode y) { super(StampTool.add(x.stamp(), y.stamp()), x, y); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -38,10 +38,6 @@ return USE_GENERATED_NODES ? new IntegerMulNodeGen(x, y) : new IntegerMulNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? IntegerMulNodeGen.class : IntegerMulNode.class; - } - protected IntegerMulNode(ValueNode x, ValueNode y) { super(x.stamp().unrestricted(), x, y); assert x.stamp().isCompatible(y.stamp()); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -39,10 +39,6 @@ return USE_GENERATED_NODES ? new IntegerSubNodeGen(x, y) : new IntegerSubNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? IntegerSubNodeGen.class : IntegerSubNode.class; - } - protected IntegerSubNode(ValueNode x, ValueNode y) { super(StampTool.sub(x.stamp(), y.stamp()), x, y); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -39,10 +39,6 @@ return USE_GENERATED_NODES ? new OrNodeGen(x, y) : new OrNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? OrNodeGen.class : OrNode.class; - } - OrNode(ValueNode x, ValueNode y) { super(StampTool.or(x.stamp(), y.stamp()), x, y); assert x.stamp().isCompatible(y.stamp()); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Wed Aug 27 20:02:06 2014 +0200 @@ -39,10 +39,6 @@ return USE_GENERATED_NODES ? new XorNodeGen(x, y) : new XorNode(x, y); } - public static Class getGenClass() { - return USE_GENERATED_NODES ? XorNodeGen.class : XorNode.class; - } - protected XorNode(ValueNode x, ValueNode y) { super(StampTool.xor(x.stamp(), y.stamp()), x, y); assert x.stamp().isCompatible(y.stamp()); diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/ComputeInliningRelevance.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/ComputeInliningRelevance.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/ComputeInliningRelevance.java Wed Aug 27 20:02:06 2014 +0200 @@ -116,7 +116,7 @@ parent = loops.get(null); break; } else { - assert current.getClass() == MergeNode.getGenClass() : current; + assert current.getNodeClass().is(MergeNode.class) : current; // follow any path upwards - it doesn't matter which one current = ((MergeNode) current).forwardEndAt(0); } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyNoNodeClassLiteralIdentityTests.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyNoNodeClassLiteralIdentityTests.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyNoNodeClassLiteralIdentityTests.java Wed Aug 27 20:02:06 2014 +0200 @@ -38,8 +38,8 @@ * Since only {@linkplain GeneratedNode generated} {@link Node} types can be instantiated (which is * checked by an assertion in {@link Node#Node()}), any identity test of a node's * {@linkplain Object#getClass() class} against a class literal of a non-generated node types will - * always return false. Instead, a static {@code getGenClass()} helper method should be used for - * such identity tests. For example, instead of: + * always return false. Instead, the {@link NodeClass#is(Class)} method should be used. For example, + * instead of: * *
  *     if (operation.getClass() == IntegerAddNode.class) { ... }
@@ -48,7 +48,7 @@
  * this should be used:
  *
  * 
- *     if (operation.getClass() == IntegerAddNode.getGenClass()) { ... }
+ *     if (operation.getNodeClass().is(IntegerAddNode.class)) { ... }
  * 
* * This phase verifies there are no identity tests against class literals for non-generated Node @@ -60,8 +60,10 @@ protected boolean verify(StructuredGraph graph, PhaseContext context) { Map errors = new HashMap<>(); + MetaAccessProvider metaAccess = context.getMetaAccess(); + ResolvedJavaType nodeClassType = metaAccess.lookupJavaType(Node.class); + for (ConstantNode c : ConstantNode.getConstantNodes(graph)) { - ResolvedJavaType nodeClassType = context.getMetaAccess().lookupJavaType(Node.class); ResolvedJavaType nodeType = context.getConstantReflection().asJavaType(c.asConstant()); if (nodeType != null && nodeClassType.isAssignableFrom(nodeType)) { NodeIterable usages = c.usages(); @@ -69,10 +71,7 @@ if (!(n instanceof ObjectEqualsNode)) { continue; } - String loc = GraphUtil.approxSourceLocation(n); - if (loc == null) { - loc = graph.method().asStackTraceElement(0).toString() + " " + n; - } + String loc = getLocation(n, graph); errors.put(nodeType.toJavaName(false), loc); } } @@ -92,4 +91,15 @@ } throw new VerificationError(f.toString()); } + + private static String getLocation(Node node, StructuredGraph graph) { + String loc = GraphUtil.approxSourceLocation(node); + StackTraceElement ste = graph.method().asStackTraceElement(0); + if (loc == null) { + loc = ste.toString(); + } else { + loc = ste.getClassName() + "." + ste.getMethodName() + "(" + loc + ")"; + } + return loc; + } } diff -r 74520179dda8 -r a1cb03f6b606 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/IdealGraphPrinter.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/IdealGraphPrinter.java Wed Aug 27 17:54:09 2014 +0200 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/IdealGraphPrinter.java Wed Aug 27 20:02:06 2014 +0200 @@ -174,9 +174,9 @@ printProperty(bit, "true"); } } - if (node.getClass() == BeginNode.getGenClass()) { + if (node.getNodeClass().is(BeginNode.class)) { printProperty("shortName", "B"); - } else if (node.getClass() == EndNode.getGenClass()) { + } else if (node.getNodeClass().is(EndNode.class)) { printProperty("shortName", "E"); } if (node.predecessor() != null) {