Mercurial > hg > truffle
diff graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java @ 15778:9ae1d2f3bda6
convert asserts into if tests and check for phis at merge
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 19 May 2014 14:14:12 -0700 |
parents | c82a77d94067 |
children | c9f913e5a93b |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Mon May 19 10:45:01 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Mon May 19 14:14:12 2014 -0700 @@ -65,16 +65,19 @@ if (predecessor instanceof MergeNode) { MergeNode merge = (MergeNode) predecessor; - // Process each predecessor at the merge, unpacking the reasons as needed. - ValueNode reason = deopt.getActionAndReason(); - List<ValueNode> values = reason instanceof ValuePhiNode ? ((ValuePhiNode) reason).values().snapshot() : Collections.nCopies(merge.forwardEndCount(), reason); + if (merge.phis().isEmpty()) { + // Process each predecessor at the merge, unpacking the reasons as needed. + ValueNode reason = deopt.getActionAndReason(); + List<ValueNode> values = reason instanceof ValuePhiNode ? ((ValuePhiNode) reason).values().snapshot() : null; - int index = 0; - for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) { - ValueNode thisReason = values.get(index++); - assert thisReason.isConstant(); - DeoptimizationReason deoptimizationReason = metaAccessProvider.decodeDeoptReason(thisReason.asConstant()); - tryUseTrappingNullCheck(deopt, end.predecessor(), deoptimizationReason, null); + int index = 0; + for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) { + ValueNode thisReason = values != null ? values.get(index++) : reason; + if (thisReason.isConstant()) { + DeoptimizationReason deoptimizationReason = metaAccessProvider.decodeDeoptReason(thisReason.asConstant()); + tryUseTrappingNullCheck(deopt, end.predecessor(), deoptimizationReason, null); + } + } } } } @@ -88,10 +91,11 @@ } if (predecessor instanceof MergeNode) { MergeNode merge = (MergeNode) predecessor; - for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) { - checkPredecessor(deopt, end.predecessor(), deoptimizationReason); + if (merge.phis().isEmpty()) { + for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) { + checkPredecessor(deopt, end.predecessor(), deoptimizationReason); + } } - } else if (predecessor instanceof BeginNode) { checkPredecessor(deopt, predecessor, deoptimizationReason); }