Mercurial > hg > truffle
diff graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java @ 19791:14e703edb2ab
use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 11 Mar 2015 20:43:12 +0100 |
parents | 67500ef4d102 |
children | 91a25b017111 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Wed Mar 11 17:16:30 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Wed Mar 11 20:43:12 2015 +0100 @@ -22,6 +22,9 @@ */ package com.oracle.graal.replacements; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; + +import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; @@ -36,19 +39,19 @@ public static Object newInstance(Class<?> componentType, int length) throws NegativeArraySizeException { // The error cases must be handled here since DynamicNewArrayNode can only deoptimize the // caller in response to exceptions. - if (length < 0) { - throw new NegativeArraySizeException(); + if (probability(SLOW_PATH_PROBABILITY, length < 0)) { + DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); } - if (componentType == void.class) { - throw new IllegalArgumentException(); + if (probability(SLOW_PATH_PROBABILITY, componentType == void.class)) { + DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); } - return DynamicNewArrayNode.newArray(GuardingPiNode.guardingNonNull(componentType), length); + return DynamicNewArrayNode.newArray(GuardingPiNode.asNonNullClass(componentType), length); } @MethodSubstitution public static int getLength(Object array) { if (!array.getClass().isArray()) { - throw new IllegalArgumentException("Argument is not an array"); + DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); } return ArrayLengthNode.arrayLength(array); }