# HG changeset patch # User Thomas Wuerthinger # Date 1373293666 -7200 # Node ID aca7481e71d179d541db7188de302705874887c5 # Parent 192a3b3c7292b46319fab496341acf7bb082c359 Create new intrinsic for GuardingPiNode for null check guarding. Fix ArraySubstitutions. diff -r 192a3b3c7292 -r aca7481e71d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon Jul 08 15:54:24 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon Jul 08 16:27:46 2013 +0200 @@ -25,6 +25,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -45,6 +46,10 @@ return object; } + public GuardingPiNode(ValueNode object) { + this(object, object.graph().unique(new IsNullNode(object)), true, DeoptimizationReason.NullCheckException, DeoptimizationAction.None, object.stamp().join(StampFactory.objectNonNull())); + } + public GuardingPiNode(ValueNode object, ValueNode condition, boolean negateCondition, DeoptimizationReason reason, DeoptimizationAction action, Stamp stamp) { super(object.stamp().join(stamp)); assert stamp() != null; @@ -83,6 +88,9 @@ } @NodeIntrinsic + public static native T guardingNonNull(T object); + + @NodeIntrinsic public static native Object guardingPi(Object object, LogicNode condition, @ConstantNodeParameter boolean negateCondition, @ConstantNodeParameter DeoptimizationReason reason, @ConstantNodeParameter DeoptimizationAction action, @ConstantNodeParameter Stamp stamp); diff -r 192a3b3c7292 -r aca7481e71d1 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Mon Jul 08 15:54:24 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Mon Jul 08 16:27:46 2013 +0200 @@ -22,8 +22,6 @@ */ package com.oracle.graal.replacements; -import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; @@ -36,9 +34,6 @@ @MethodSubstitution public static Object newInstance(Class componentType, int length) throws NegativeArraySizeException { - if (componentType == null) { - DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.NullCheckException); - } - return DynamicNewArrayNode.newArray(componentType, length); + return DynamicNewArrayNode.newArray(GuardingPiNode.guardingNonNull(componentType), length); } }