# HG changeset patch # User Lukas Stadler # Date 1403792855 -7200 # Node ID c5b2a3c22318d753ff71404d1c1db370f4991a38 # Parent b35b25c683873f789800f3d1988c69c925465716 refactor more Canonicalizable implementations to not add new nodes to the graph diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java Thu Jun 26 16:27:35 2014 +0200 @@ -56,7 +56,7 @@ * We can't call that directly so just call getClassLoader. */ ClassLoader classLoader = c.getClassLoader(); - return ConstantNode.forConstant(HotSpotObjectConstant.forObject(classLoader), tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(HotSpotObjectConstant.forObject(classLoader), tool.getMetaAccess()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -51,7 +51,7 @@ Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { Class componentType = c.getComponentType(); - return ConstantNode.forConstant(HotSpotObjectConstant.forObject(componentType), tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(HotSpotObjectConstant.forObject(componentType), tool.getMetaAccess()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** * {@link MacroNode Macro node} for {@link Class#getModifiers()}. - * + * * @see ClassSubstitutions#getModifiers(Class) */ public class ClassGetModifiersNode extends MacroNode implements Canonicalizable { @@ -50,7 +50,7 @@ if (javaClass.isConstant()) { Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { - return ConstantNode.forInt(c.getModifiers(), graph()); + return ConstantNode.forInt(c.getModifiers()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -51,7 +51,7 @@ Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { Class superclass = c.getSuperclass(); - return ConstantNode.forConstant(HotSpotObjectConstant.forObject(superclass), tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(HotSpotObjectConstant.forObject(superclass), tool.getMetaAccess()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** * {@link MacroNode Macro node} for {@link Class#isArray()}. - * + * * @see ClassSubstitutions#isArray(Class) */ public class ClassIsArrayNode extends MacroNode implements Canonicalizable { @@ -50,7 +50,7 @@ if (javaClass.isConstant()) { Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { - return ConstantNode.forBoolean(c.isArray(), graph()); + return ConstantNode.forBoolean(c.isArray()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ /** * {@link MacroNode Macro node} for {@link Class#isInstance(Object)}. - * + * * @see ClassSubstitutions#isInstance(Class, Object) */ public class ClassIsInstanceNode extends MacroNode implements Canonicalizable { @@ -58,15 +58,15 @@ Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { if (c.isPrimitive()) { - return ConstantNode.forBoolean(false, graph()); + return ConstantNode.forBoolean(false); } if (object.isConstant()) { Object o = HotSpotObjectConstant.asObject(object.asConstant()); - return ConstantNode.forBoolean(o != null && c.isInstance(o), graph()); + return ConstantNode.forBoolean(o != null && c.isInstance(o)); } HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) HotSpotResolvedObjectType.fromClass(c); - InstanceOfNode instanceOf = graph().unique(new InstanceOfNode(type, object, null)); - return graph().unique(new ConditionalNode(instanceOf, ConstantNode.forBoolean(true, graph()), ConstantNode.forBoolean(false, graph()))); + InstanceOfNode instanceOf = new InstanceOfNode(type, object, null); + return new ConditionalNode(instanceOf, ConstantNode.forBoolean(true), ConstantNode.forBoolean(false)); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -31,7 +31,7 @@ /** * {@link MacroNode Macro node} for {@link Class#isInterface()}. - * + * * @see ClassSubstitutions#isInterface(Class) */ public class ClassIsInterfaceNode extends MacroNode implements Canonicalizable { @@ -50,7 +50,7 @@ if (javaClass.isConstant()) { Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { - return ConstantNode.forBoolean(c.isInterface(), graph()); + return ConstantNode.forBoolean(c.isInterface()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** * {@link MacroNode Macro node} for {@link Class#isPrimitive()}. - * + * * @see ClassSubstitutions#isPrimitive(Class) */ public class ClassIsPrimitiveNode extends MacroNode implements Canonicalizable { @@ -50,7 +50,7 @@ if (javaClass.isConstant()) { Class c = (Class) HotSpotObjectConstant.asObject(javaClass.asConstant()); if (c != null) { - return ConstantNode.forBoolean(c.isPrimitive(), graph()); + return ConstantNode.forBoolean(c.isPrimitive()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -129,7 +129,7 @@ ValueNode destAddr = computeBase(getDestination(), getDestinationPosition()); ValueNode len = getLength(); if (len.stamp().getStackKind() != Kind.Long) { - len = IntegerConvertNode.convert(len, StampFactory.forKind(Kind.Long)); + len = IntegerConvertNode.convert(len, StampFactory.forKind(Kind.Long), graph()); } ForeignCallNode call = graph.add(new ForeignCallNode(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len)); call.setStateAfter(stateAfter()); diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -70,14 +70,14 @@ ResolvedJavaType type = StampTool.typeOrNull(getObject()); if (StampTool.isExactType(getObject())) { Constant clazz = type.getEncoding(Representation.JavaClass); - return ConstantNode.forConstant(clazz, tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(clazz, tool.getMetaAccess()); } if (type != null && tool.assumptions().useOptimisticAssumptions()) { ResolvedJavaType exactType = type.findUniqueConcreteSubtype(); if (exactType != null) { tool.assumptions().recordConcreteSubtype(type, exactType); Constant clazz = exactType.getEncoding(Representation.JavaClass); - return ConstantNode.forConstant(clazz, tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(clazz, tool.getMetaAccess()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,7 +53,7 @@ ConstantNode callerClassNode = getCallerClassNode(tool.getMetaAccess()); if (callerClassNode != null) { - graph().replaceFixedWithFloating(this, callerClassNode); + graph().replaceFixedWithFloating(this, graph().addOrUniqueWithInputs(callerClassNode)); } else { InvokeNode invoke = createInvoke(); graph().replaceFixedWithFixed(this, invoke); @@ -64,7 +64,7 @@ /** * If inlining is deep enough this method returns a {@link ConstantNode} of the caller class by * walking the the stack. - * + * * @param metaAccess * @return ConstantNode of the caller class, or null */ @@ -94,7 +94,7 @@ if (!method.ignoredBySecurityStackWalk()) { // We have reached the desired frame; return the holder class. HotSpotResolvedObjectType callerClass = method.getDeclaringClass(); - return ConstantNode.forConstant(HotSpotObjectConstant.forObject(callerClass.mirror()), metaAccess, graph()); + return ConstantNode.forConstant(HotSpotObjectConstant.forObject(callerClass.mirror()), metaAccess); } break; } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 @@ -124,12 +124,12 @@ ValueNode stride = strideNode(); ValueNode initNode = this.initNode(); if (!fromStamp.isCompatible(stamp)) { - stride = IntegerConvertNode.convert(stride, stamp); - initNode = IntegerConvertNode.convert(initNode, stamp); + stride = IntegerConvertNode.convert(stride, stamp, graph()); + initNode = IntegerConvertNode.convert(initNode, stamp, graph()); } ValueNode maxTripCount = loop.counted().maxTripCountNode(assumePositiveTripCount); if (!maxTripCount.stamp().isCompatible(stamp)) { - maxTripCount = IntegerConvertNode.convert(maxTripCount, stamp); + maxTripCount = IntegerConvertNode.convert(maxTripCount, stamp, graph()); } return IntegerArithmeticNode.add(graph, IntegerArithmeticNode.mul(graph, stride, IntegerArithmeticNode.sub(graph, maxTripCount, ConstantNode.forIntegerStamp(stamp, 1, graph))), initNode); } @@ -139,7 +139,7 @@ Stamp stamp = phi.stamp(); ValueNode maxTripCount = loop.counted().maxTripCountNode(false); if (!maxTripCount.stamp().isCompatible(stamp)) { - maxTripCount = IntegerConvertNode.convert(maxTripCount, stamp); + maxTripCount = IntegerConvertNode.convert(maxTripCount, stamp, graph()); } return IntegerArithmeticNode.add(graph(), IntegerArithmeticNode.mul(graph(), strideNode(), maxTripCount), initNode()); } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 @@ -93,7 +93,7 @@ @Override public ValueNode extremumNode(boolean assumePositiveTripCount, Stamp stamp) { - return op(base.extremumNode(assumePositiveTripCount, stamp), IntegerConvertNode.convert(offset, stamp)); + return op(base.extremumNode(assumePositiveTripCount, stamp), IntegerConvertNode.convert(offset, stamp, graph())); } @Override diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Thu Jun 26 16:27:35 2014 +0200 @@ -103,7 +103,7 @@ @Override public ValueNode extremumNode(boolean assumePositiveTripCount, Stamp stamp) { - return IntegerArithmeticNode.mul(graph(), base.extremumNode(assumePositiveTripCount, stamp), IntegerConvertNode.convert(scale, stamp)); + return IntegerArithmeticNode.mul(graph(), base.extremumNode(assumePositiveTripCount, stamp), IntegerConvertNode.convert(scale, stamp, graph())); } @Override diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(nameTemplate = "ConditionAnchor(!={p#negated})", allowedUsageTypes = {InputType.Guard}) -public final class ConditionAnchorNode extends FixedWithNextNode implements Canonicalizable, Lowerable, GuardingNode { +public final class ConditionAnchorNode extends FixedWithNextNode implements Canonicalizable.Unary, Lowerable, GuardingNode { @Input(InputType.Condition) private LogicNode condition; private boolean negated; @@ -48,11 +48,6 @@ return condition; } - private void setCondition(LogicNode x) { - updateUsages(condition, x); - condition = x; - } - public boolean isNegated() { return negated; } @@ -66,24 +61,19 @@ } } - @Override - public Node canonical(CanonicalizerTool tool) { + public Node canonical(CanonicalizerTool tool, Node forValue) { if (condition instanceof LogicNegationNode) { LogicNegationNode negation = (LogicNegationNode) condition; - setCondition(negation.getValue()); - negated = !negated; + return new ConditionAnchorNode(negation.getValue(), !negated); } - if (condition instanceof LogicConstantNode) { LogicConstantNode c = (LogicConstantNode) condition; if (c.getValue() != negated) { - this.replaceAtUsages(null); return null; } else { - return graph().add(new ValueAnchorNode(null)); + return new ValueAnchorNode(null); } } - return this; } @@ -94,4 +84,8 @@ graph().replaceFixedWithFixed(this, newAnchor); } } + + public Node getValue() { + return condition; + } } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -83,7 +83,7 @@ if (stamp().equals(object().stamp())) { return object(); } else { - return graph().unique(new PiNode(object(), stamp())); + return new PiNode(object(), stamp()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -118,19 +118,19 @@ public Node canonical(CanonicalizerTool tool) { if (stamp() == StampFactory.illegal(object.getKind())) { // The guard always fails - return graph().add(new DeoptimizeNode(action, reason)); + return new DeoptimizeNode(action, reason); } if (condition instanceof LogicConstantNode) { LogicConstantNode c = (LogicConstantNode) condition; if (c.getValue() == negated) { // The guard always fails - return graph().add(new DeoptimizeNode(action, reason)); + return new DeoptimizeNode(action, reason); } else if (stamp().equals(object().stamp())) { // The guard always succeeds, and does not provide new type information return object; } else { // The guard always succeeds, and provides new type information - return graph().unique(new PiNode(object, stamp())); + return new PiNode(object, stamp()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -76,7 +76,7 @@ public ValueNode canonical(CanonicalizerTool tool) { if (condition instanceof LogicNegationNode) { LogicNegationNode negated = (LogicNegationNode) condition; - return graph().unique(new ConditionalNode(negated.getValue(), falseValue(), trueValue())); + return new ConditionalNode(negated.getValue(), falseValue(), trueValue()); } // this optimizes the case where a value that can only be 0 or 1 is materialized to 0 or 1 diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -74,12 +74,20 @@ return convert(input, stamp, false); } + public static ValueNode convert(ValueNode input, Stamp stamp, StructuredGraph graph) { + ValueNode convert = convert(input, stamp, false); + if (!convert.isAlive()) { + assert !convert.isDeleted(); + convert = graph.addOrUnique(convert); + } + return convert; + } + public static ValueNode convertUnsigned(ValueNode input, Stamp stamp) { return convert(input, stamp, true); } public static ValueNode convert(ValueNode input, Stamp stamp, boolean zeroExtend) { - StructuredGraph graph = input.graph(); IntegerStamp fromStamp = (IntegerStamp) input.stamp(); IntegerStamp toStamp = (IntegerStamp) stamp; @@ -87,13 +95,13 @@ if (toStamp.getBits() == fromStamp.getBits()) { result = input; } else if (toStamp.getBits() < fromStamp.getBits()) { - result = graph.unique(new NarrowNode(input, toStamp.getBits())); + result = new NarrowNode(input, toStamp.getBits()); } else if (zeroExtend) { // toStamp.getBits() > fromStamp.getBits() - result = graph.unique(new ZeroExtendNode(input, toStamp.getBits())); + result = new ZeroExtendNode(input, toStamp.getBits()); } else { // toStamp.getBits() > fromStamp.getBits() - result = graph.unique(new SignExtendNode(input, toStamp.getBits())); + result = new SignExtendNode(input, toStamp.getBits()); } IntegerStamp resultStamp = (IntegerStamp) result.stamp(); diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -69,7 +69,7 @@ @Override public Node canonical(CanonicalizerTool tool) { if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) { - return graph().unique(new FloatingReadNode(((PiNode) object()).getOriginalNode(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType())); + return new FloatingReadNode(((PiNode) object()).getOriginalNode(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType()); } return ReadNode.canonicalizeRead(this, location(), object(), tool); } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,6 +72,8 @@ public IndexedLocationNode(LocationIdentity identity, Kind kind, long displacement, ValueNode index, int indexScaling) { super(StampFactory.forVoid()); + assert index != null; + assert indexScaling != 0; assert kind != Kind.Illegal && kind != Kind.Void; this.valueKind = kind; this.locationIdentity = identity; @@ -92,10 +94,8 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (index == null || indexScaling == 0) { - return ConstantLocationNode.create(getLocationIdentity(), getValueKind(), displacement, graph()); - } else if (index.isConstant()) { - return ConstantLocationNode.create(getLocationIdentity(), getValueKind(), index.asConstant().asLong() * indexScaling + displacement, graph()); + if (index.isConstant()) { + return ConstantLocationNode.create(getLocationIdentity(), getValueKind(), index.asConstant().asLong() * indexScaling + displacement); } return this; } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -76,12 +76,12 @@ @Override protected ValueNode cloneAsFieldAccess(ResolvedJavaField field) { - return this.graph().add(new LoadFieldNode(object(), field)); + return new LoadFieldNode(object(), field); } @Override protected ValueNode cloneAsArrayAccess(ValueNode location, LocationIdentity identity) { - return this.graph().add(new UnsafeLoadNode(object(), location, accessKind(), identity)); + return new UnsafeLoadNode(object(), location, accessKind(), identity); } @SuppressWarnings({"unchecked", "unused"}) diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -95,7 +95,7 @@ if (forHub.isConstant()) { ResolvedJavaType t = tool.getConstantReflection().asJavaType(forHub.asConstant()); if (t != null) { - return graph().add(new CheckCastNode(t, forObject, null, forStoreCheck)); + return new CheckCastNode(t, forObject, null, forStoreCheck); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -42,7 +42,7 @@ if (clazz.isConstant()) { ResolvedJavaType type = tool.getConstantReflection().asJavaType(clazz.asConstant()); if (type != null && type.isInitialized()) { - return graph().add(new NewInstanceNode(type, fillContents())); + return new NewInstanceNode(type, fillContents()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,33 +35,33 @@ * This node is used to perform the finalizer registration at the end of the java.lang.Object * constructor. */ -public final class RegisterFinalizerNode extends AbstractStateSplit implements Canonicalizable, LIRLowerable, Virtualizable, DeoptimizingNode.DeoptAfter { +public final class RegisterFinalizerNode extends AbstractStateSplit implements Canonicalizable.Unary, LIRLowerable, Virtualizable, DeoptimizingNode.DeoptAfter { @Input(InputType.State) private FrameState deoptState; - @Input private ValueNode object; + @Input private ValueNode value; - public ValueNode object() { - return object; + public RegisterFinalizerNode(ValueNode value) { + super(StampFactory.forVoid()); + this.value = value; } - public RegisterFinalizerNode(ValueNode object) { - super(StampFactory.forVoid()); - this.object = object; + public ValueNode getValue() { + return value; } @Override public void generate(NodeLIRBuilderTool gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(REGISTER_FINALIZER); - gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), gen.operand(object())); + gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), gen.operand(getValue())); } @Override - public Node canonical(CanonicalizerTool tool) { - if (!(object.stamp() instanceof ObjectStamp)) { + public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) { + if (!(forValue.stamp() instanceof ObjectStamp)) { return this; } - ObjectStamp stamp = (ObjectStamp) object.stamp(); + ObjectStamp stamp = (ObjectStamp) forValue.stamp(); boolean needsCheck = true; if (stamp.isExactType()) { @@ -84,7 +84,7 @@ @Override public void virtualize(VirtualizerTool tool) { - State state = tool.getObjectState(object); + State state = tool.getObjectState(getValue()); if (state != null && !state.getVirtualObject().type().hasFinalizer()) { tool.delete(); } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java --- a/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -123,7 +123,7 @@ @Override public Node canonical(CanonicalizerTool tool) { if (getParameter().isConstant()) { - return ConstantNode.forPrimitive(evalConst(getParameter().asConstant()), graph()); + return ConstantNode.forPrimitive(evalConst(getParameter().asConstant())); } return this; } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -66,7 +66,7 @@ return null; } if (GraphUtil.unproxify(array1) == GraphUtil.unproxify(array2)) { - return ConstantNode.forBoolean(true, graph()); + return ConstantNode.forBoolean(true); } return this; } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -52,7 +52,7 @@ if (param.isConstant()) { Constant constant = evaluate(param.asConstant(), tool.getMetaAccess()); if (constant != null) { - return ConstantNode.forConstant(constant, tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(constant, tool.getMetaAccess()); } } } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java Thu Jun 26 16:27:35 2014 +0200 @@ -49,7 +49,7 @@ loadFieldNode.field().getAnnotation(CompilerDirectives.CompilationFinal.class) != null) { Constant constant = loadFieldNode.field().readValue(loadFieldNode.object().asConstant()); assert verifyFieldValue(loadFieldNode.field(), constant); - return ConstantNode.forConstant(constant, metaAccess, loadFieldNode.graph()); + return ConstantNode.forConstant(constant, metaAccess); } } } else if (node instanceof LoadIndexedNode) { @@ -59,7 +59,7 @@ Constant constant = constantReflection.readArrayElement(loadIndexedNode.array().asConstant(), index); if (constant != null) { - return ConstantNode.forConstant(constant, metaAccess, loadIndexedNode.graph()); + return ConstantNode.forConstant(constant, metaAccess); } } } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -38,7 +38,7 @@ /** * Creates a new {@link LoadIndexedFinalNode}. - * + * * @param array the instruction producing the array * @param index the instruction producing the index * @param elementKind the element type @@ -52,7 +52,7 @@ if (array().isConstant() && index().isConstant()) { Constant constant = tool.getConstantReflection().readArrayElement(array().asConstant(), index().asConstant().asInt()); if (constant != null) { - return ConstantNode.forConstant(constant, tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(constant, tool.getMetaAccess()); } } return this; diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,10 +59,10 @@ assert xConst.getKind() == yConst.getKind(); try { if (xConst.getKind() == Kind.Int) { - return ConstantNode.forInt(ExactMath.addExact(xConst.asInt(), yConst.asInt()), graph()); + return ConstantNode.forInt(ExactMath.addExact(xConst.asInt(), yConst.asInt())); } else { assert xConst.getKind() == Kind.Long; - return ConstantNode.forLong(ExactMath.addExact(xConst.asLong(), yConst.asLong()), graph()); + return ConstantNode.forLong(ExactMath.addExact(xConst.asLong(), yConst.asLong())); } } catch (ArithmeticException ex) { // The operation will result in an overflow exception, so do not canonicalize. diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,10 +60,10 @@ assert xConst.getKind() == yConst.getKind(); try { if (xConst.getKind() == Kind.Int) { - return ConstantNode.forInt(ExactMath.subtractExact(xConst.asInt(), yConst.asInt()), graph()); + return ConstantNode.forInt(ExactMath.subtractExact(xConst.asInt(), yConst.asInt())); } else { assert xConst.getKind() == Kind.Long; - return ConstantNode.forLong(ExactMath.subtractExact(xConst.asLong(), yConst.asLong()), graph()); + return ConstantNode.forLong(ExactMath.subtractExact(xConst.asLong(), yConst.asLong())); } } catch (ArithmeticException ex) { // The operation will result in an overflow exception, so do not canonicalize. diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -59,7 +59,7 @@ public Node canonical(CanonicalizerTool tool) { if (object.isConstant() && !object.isNullConstant() && offset.isConstant() && condition.isConstant() && condition.asConstant().asInt() == 1) { Constant constant = tool.getConstantReflection().readUnsafeConstant(accessKind, object.asConstant(), offset.asConstant().asLong()); - return ConstantNode.forConstant(constant, tool.getMetaAccess(), graph()); + return ConstantNode.forConstant(constant, tool.getMetaAccess()); } return this; } diff -r b35b25c68387 -r c5b2a3c22318 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,10 +62,9 @@ } else { locationIdentity = ObjectLocationIdentity.create(locationArgument.asConstant()); } - CompareNode compare = CompareNode.createCompareNode(graph(), Condition.EQ, conditionArgument, ConstantNode.forBoolean(true, graph())); + CompareNode compare = CompareNode.createCompareNode(Condition.EQ, conditionArgument, ConstantNode.forBoolean(true)); Kind returnKind = this.getTargetMethod().getSignature().getReturnKind(); - Node result = graph().add(new UnsafeLoadNode(objectArgument, offsetArgument, returnKind, locationIdentity, compare)); - return result; + return new UnsafeLoadNode(objectArgument, offsetArgument, returnKind, locationIdentity, compare); } return this; }