# HG changeset patch # User Gilles Duboscq # Date 1389963662 -3600 # Node ID a5206a3b92f2857d8010017a8474c5168a562003 # Parent 076e233aec3fcf202682d99b7fe08b7d54725acf UseTrappingNullChecksPhase: do not use trapping null check for a reason which is not null check or has an attached speculation diff -r 076e233aec3f -r a5206a3b92f2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java --- 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); } diff -r 076e233aec3f -r a5206a3b92f2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java --- 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) {