# HG changeset patch # User Thomas Wuerthinger # Date 1376647776 -7200 # Node ID dc14bcf752ea37bd27ddc4df65e6579bbc54f59f # Parent b7bfa23530568c76692707752a0457f1a8f0c6da New constructor for ConditionalNode. Made CustomTypeCheck node a LogicNode. diff -r b7bfa2353056 -r dc14bcf752ea 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 Fri Aug 16 01:12:34 2013 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Aug 16 12:09:36 2013 +0200 @@ -812,7 +812,7 @@ if (type instanceof ResolvedJavaType) { ResolvedJavaType resolvedType = (ResolvedJavaType) type; InstanceOfNode instanceOfNode = new InstanceOfNode((ResolvedJavaType) type, object, getProfileForTypeCheck(resolvedType)); - frameState.ipush(append(new ConditionalNode(currentGraph.unique(instanceOfNode), ConstantNode.forInt(1, currentGraph), ConstantNode.forInt(0, currentGraph)))); + frameState.ipush(append(new ConditionalNode(currentGraph.unique(instanceOfNode)))); } else { handleUnresolvedInstanceOf(type, object); } diff -r b7bfa2353056 -r dc14bcf752ea 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 Fri Aug 16 01:12:34 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Fri Aug 16 12:09:36 2013 +0200 @@ -42,6 +42,10 @@ return condition; } + public ConditionalNode(LogicNode condition) { + this(condition, ConstantNode.forInt(1, condition.graph()), ConstantNode.forInt(0, condition.graph())); + } + public ConditionalNode(LogicNode condition, ValueNode trueValue, ValueNode falseValue) { super(trueValue.kind(), trueValue, falseValue); assert trueValue.kind() == falseValue.kind(); @@ -104,11 +108,11 @@ } private ConditionalNode(Condition condition, ValueNode x, ValueNode y) { - this(createCompareNode(condition, x, y), ConstantNode.forInt(1, x.graph()), ConstantNode.forInt(0, x.graph())); + this(createCompareNode(condition, x, y)); } private ConditionalNode(ValueNode type, ValueNode object) { - this(type.graph().add(new InstanceOfDynamicNode(type, object)), ConstantNode.forInt(1, type.graph()), ConstantNode.forInt(0, type.graph())); + this(type.graph().add(new InstanceOfDynamicNode(type, object))); } @NodeIntrinsic diff -r b7bfa2353056 -r dc14bcf752ea graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckMacroNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckMacroNode.java Fri Aug 16 01:12:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckMacroNode.java Fri Aug 16 12:09:36 2013 +0200 @@ -23,6 +23,7 @@ package com.oracle.graal.truffle.nodes.typesystem; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.truffle.nodes.asserts.*; import com.oracle.truffle.api.*; @@ -49,7 +50,7 @@ Object typeToken = customTypeArgument.asConstant().asObject(); ValueNode conditionArgument = arguments.get(CONDITION_ARGUMENT_INDEX); ValueNode objectArgument = arguments.get(OBJECT_ARGUMENT_INDEX); - return graph().unique(new CustomTypeCheckNode(conditionArgument, objectArgument, typeToken)); + return graph().unique(new ConditionalNode(graph().unique(new CustomTypeCheckNode(conditionArgument, objectArgument, typeToken)))); } return this; } diff -r b7bfa2353056 -r dc14bcf752ea graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckNode.java Fri Aug 16 01:12:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomTypeCheckNode.java Fri Aug 16 12:09:36 2013 +0200 @@ -26,14 +26,13 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -public final class CustomTypeCheckNode extends FloatingNode implements Lowerable { +public final class CustomTypeCheckNode extends LogicNode implements Lowerable, com.oracle.graal.graph.Node.IterableNodeType { @Input private ValueNode condition; @Input private ValueNode object; private final Object customType; public CustomTypeCheckNode(ValueNode condition, ValueNode object, Object customType) { - super(condition.stamp()); this.condition = condition; this.object = object; this.customType = customType; @@ -53,8 +52,13 @@ public void lower(LoweringTool tool, LoweringType loweringType) { if (loweringType == LoweringType.BEFORE_GUARDS) { - this.replaceAtUsages(condition); + this.replaceAtUsages(graph().unique(new IntegerEqualsNode(condition, ConstantNode.forInt(1, graph())))); this.safeDelete(); } } + + @Override + public LogicNode canonical(CanonicalizerTool tool) { + return this; + } } diff -r b7bfa2353056 -r dc14bcf752ea graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeCustomizationNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeCustomizationNode.java Fri Aug 16 01:12:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeCustomizationNode.java Fri Aug 16 12:09:36 2013 +0200 @@ -27,7 +27,7 @@ import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public final class UnsafeCustomizationNode extends FloatingNode implements LIRLowerable { +public final class UnsafeCustomizationNode extends FloatingNode implements LIRLowerable, com.oracle.graal.graph.Node.IterableNodeType { @Input private ValueNode receiver; private final Object customType;