changeset 20101:178814b064a7

moved use of GraphUtil.originalValue API into InvocationPlugins to avoid its overhead during canonicalization
author Doug Simon <doug.simon@oracle.com>
date Tue, 31 Mar 2015 14:12:23 +0200
parents 1505cfecbeed
children 6e5df2d60fbd
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassQueryNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java
diffstat 4 files changed, 11 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java	Tue Mar 31 14:11:07 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java	Tue Mar 31 14:12:23 2015 +0200
@@ -47,6 +47,7 @@
 import com.oracle.graal.nodes.HeapAccess.BarrierType;
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.spi.*;
+import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.options.*;
 import com.oracle.graal.replacements.*;
 import com.oracle.graal.word.*;
@@ -124,7 +125,7 @@
             r.register1(query.name(), Receiver.class, new InvocationPlugin() {
                 public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
                     ValueNode javaClass = receiver.get();
-                    ValueNode folded = ClassQueryNode.tryFold(javaClass, query, b.getMetaAccess(), b.getConstantReflection());
+                    ValueNode folded = ClassQueryNode.tryFold(GraphUtil.originalValue(javaClass), query, b.getMetaAccess(), b.getConstantReflection());
                     if (folded != null) {
                         b.addPush(query.returnKind, folded);
                     } else {
@@ -137,7 +138,7 @@
         r.register2("cast", Receiver.class, Object.class, new InvocationPlugin() {
             public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode object) {
                 ValueNode javaClass = receiver.get();
-                ValueNode folded = ClassCastNode.tryFold(javaClass, object, b.getConstantReflection(), b.getAssumptions());
+                ValueNode folded = ClassCastNode.tryFold(GraphUtil.originalValue(javaClass), object, b.getConstantReflection(), b.getAssumptions());
                 if (folded != null) {
                     b.addPush(Kind.Object, folded);
                 } else {
@@ -151,7 +152,7 @@
     private static void registerCallSitePlugins(InvocationPlugins plugins) {
         InvocationPlugin plugin = new InvocationPlugin() {
             public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
-                ValueNode callSite = receiver.get();
+                ValueNode callSite = GraphUtil.originalValue(receiver.get());
                 ValueNode folded = CallSiteTargetNode.tryFold(callSite, b.getMetaAccess(), b.getAssumptions());
                 if (folded != null) {
                     b.addPush(Kind.Object, folded);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java	Tue Mar 31 14:11:07 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java	Tue Mar 31 14:12:23 2015 +0200
@@ -29,7 +29,6 @@
 import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.java.*;
-import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.replacements.nodes.*;
 
 /**
@@ -67,9 +66,8 @@
     }
 
     public static ValueNode tryFold(ValueNode javaClass, ValueNode object, ConstantReflectionProvider constantReflection, Assumptions assumptions) {
-        ValueNode value = GraphUtil.originalValue(javaClass);
-        if (value.isConstant()) {
-            ResolvedJavaType type = constantReflection.asJavaType(value.asConstant());
+        if (javaClass != null && javaClass.isConstant()) {
+            ResolvedJavaType type = constantReflection.asJavaType(javaClass.asConstant());
             if (type != null && !type.isPrimitive()) {
                 return CheckCastNode.create(type, object, null, false, assumptions);
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassQueryNode.java	Tue Mar 31 14:11:07 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassQueryNode.java	Tue Mar 31 14:12:23 2015 +0200
@@ -30,7 +30,6 @@
 import com.oracle.graal.nodeinfo.*;
 import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
 import com.oracle.graal.nodes.*;
-import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.replacements.nodes.*;
 
 /**
@@ -79,13 +78,12 @@
     }
 
     public static ValueNode tryFold(ValueNode javaClass, Query query, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection) {
-        ValueNode value = GraphUtil.originalValue(javaClass);
-        if (value != null && value.isConstant()) {
+        if (javaClass != null && javaClass.isConstant()) {
             if (query.returnKind == Kind.Object) {
                 if (GraalOptions.ImmutableCode.getValue()) {
                     return null;
                 }
-                HotSpotObjectConstant c = (HotSpotObjectConstant) value.asConstant();
+                HotSpotObjectConstant c = (HotSpotObjectConstant) javaClass.asConstant();
                 JavaConstant answer;
                 switch (query) {
                     case getClassLoader0:
@@ -105,7 +103,7 @@
                     return ConstantNode.forConstant(answer, metaAccess);
                 }
             } else {
-                ResolvedJavaType type = constantReflection.asJavaType(value.asConstant());
+                ResolvedJavaType type = constantReflection.asJavaType(javaClass.asConstant());
                 if (type != null) {
                     switch (query) {
                         case isArray:
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Tue Mar 31 14:11:07 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Tue Mar 31 14:12:23 2015 +0200
@@ -30,7 +30,6 @@
 import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.spi.*;
-import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.replacements.nodes.*;
 
 @NodeInfo
@@ -46,9 +45,8 @@
         return arguments.get(0);
     }
 
-    public static ConstantNode tryFold(ValueNode initialCallSite, MetaAccessProvider metaAccess, Assumptions assumptions) {
-        ValueNode callSite = GraphUtil.originalValue(initialCallSite);
-        if (callSite.isConstant() && !callSite.isNullConstant()) {
+    public static ConstantNode tryFold(ValueNode callSite, MetaAccessProvider metaAccess, Assumptions assumptions) {
+        if (callSite != null && callSite.isConstant() && !callSite.isNullConstant()) {
             HotSpotObjectConstant c = (HotSpotObjectConstant) callSite.asConstant();
             JavaConstant target = c.getCallSiteTarget(assumptions);
             if (target != null) {