Mercurial > hg > truffle
changeset 6456:a20c8500770c
removed need for genTypeBranch() in XIR by replacing an IsTypeNode with an ObjectEqualsNode during lowering
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 27 Sep 2012 20:29:17 +0200 |
parents | c4d21bd7653b |
children | 03a1a0c5ee84 |
files | graal/com.oracle.graal.compiler.phases/src/com/oracle/graal/compiler/util/InliningUtil.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/IsTypeNode.java |
diffstat | 3 files changed, 15 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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);
--- 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 }