Mercurial > hg > graal-jvmci-8
changeset 10652:aca7481e71d1
Create new intrinsic for GuardingPiNode for null check guarding. Fix ArraySubstitutions.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 08 Jul 2013 16:27:46 +0200 |
parents | 192a3b3c7292 |
children | ab689f0086bb |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java |
diffstat | 2 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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> 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);
--- 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); } }