Mercurial > hg > graal-compiler
changeset 13668:a5206a3b92f2
UseTrappingNullChecksPhase: do not use trapping null check for a reason which is not null check or has an attached speculation
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Fri, 17 Jan 2014 14:01:02 +0100 |
parents | 076e233aec3f |
children | 034706a93f27 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java |
diffstat | 2 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Jan 17 13:58:56 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Jan 17 14:01:02 2014 +0100 @@ -76,6 +76,10 @@ return ConstantNode.forConstant(speculation, metaAccess, graph()); } + public Constant getSpeculation() { + return speculation; + } + @NodeIntrinsic public static native void deopt(@ConstantNodeParameter DeoptimizationAction action, @ConstantNodeParameter DeoptimizationReason reason); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Fri Jan 17 13:58:56 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Fri Jan 17 14:01:02 2014 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.phases.common; +import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.StructuredGraph.GuardsStage; @@ -46,6 +47,12 @@ } private static void tryUseTrappingNullCheck(DeoptimizeNode deopt) { + if (deopt.reason() != DeoptimizationReason.NullCheckException) { + return; + } + if (deopt.getSpeculation() != null && deopt.getSpeculation() != Constant.NULL_OBJECT) { + return; + } Node predecessor = deopt.predecessor(); Node branch = null; while (predecessor instanceof AbstractBeginNode) {