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);
     }