# HG changeset patch # User Doug Simon # Date 1348770557 -7200 # Node ID a20c8500770c97b413e6a04eaaa118903a497cf5 # Parent c4d21bd7653b47db047bb5a3361b07a18ed0f4d4 removed need for genTypeBranch() in XIR by replacing an IsTypeNode with an ObjectEqualsNode during lowering diff -r c4d21bd7653b -r a20c8500770c graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java --- a/graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java Thu Sep 27 16:58:01 2012 +0200 +++ b/graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java Thu Sep 27 20:29:17 2012 +0200 @@ -190,8 +190,8 @@ // receiver null check must be before the type check InliningUtil.receiverNullCheck(invoke); ValueNode receiver = invoke.methodCallTarget().receiver(); - ReadHubNode objectClass = graph.add(new ReadHubNode(receiver)); - IsTypeNode isTypeNode = graph.unique(new IsTypeNode(objectClass, type)); + ReadHubNode receiverHub = graph.add(new ReadHubNode(receiver)); + IsTypeNode isTypeNode = graph.unique(new IsTypeNode(receiverHub, type)); FixedGuardNode guard = graph.add(new FixedGuardNode(isTypeNode, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile, invoke.leafGraphId())); ValueAnchorNode anchor = graph.add(new ValueAnchorNode()); assert invoke.predecessor() != null; @@ -199,7 +199,7 @@ ValueNode anchoredReceiver = createAnchoredReceiver(graph, anchor, type, receiver, true); invoke.callTarget().replaceFirstInput(receiver, anchoredReceiver); - graph.addBeforeFixed(invoke.node(), objectClass); + graph.addBeforeFixed(invoke.node(), receiverHub); graph.addBeforeFixed(invoke.node(), guard); graph.addBeforeFixed(invoke.node(), anchor); diff -r c4d21bd7653b -r a20c8500770c graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Sep 27 16:58:01 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Sep 27 20:29:17 2012 +0200 @@ -418,6 +418,12 @@ if (matches(graph, GraalOptions.HIRLowerInstanceOf)) { instanceofSnippets.lower((InstanceOfNode) n, tool); } + } else if (n instanceof IsTypeNode) { + IsTypeNode isType = (IsTypeNode) n; + ValueNode objectHub = isType.objectClass(); + ConstantNode hub = ConstantNode.forObject(new HotSpotKlassOop(isType.type()), this, graph); + ObjectEqualsNode typeCheck = graph.unique(new ObjectEqualsNode(objectHub, hub)); + graph.replaceFloating(isType, typeCheck); } else if (n instanceof NewInstanceNode) { if (matches(graph, GraalOptions.HIRLowerNewInstance)) { newObjectSnippets.lower((NewInstanceNode) n, tool); diff -r c4d21bd7653b -r a20c8500770c graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java Thu Sep 27 16:58:01 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java Thu Sep 27 20:29:17 2012 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public final class IsTypeNode extends BooleanNode implements Canonicalizable, LIRLowerable { +public final class IsTypeNode extends BooleanNode implements Canonicalizable, Lowerable, LIRLowerable { @Input private ValueNode objectClass; private final ResolvedJavaType type; @@ -56,6 +56,11 @@ } @Override + public void lower(LoweringTool tool) { + tool.getRuntime().lower(this, tool); + } + + @Override public void generate(LIRGeneratorTool gen) { // nothing to do }