changeset 16069:4291873b259b

[inliner] extracted reusable query methods in InlineableGraph
author Miguel Garcia <miguel.m.garcia@oracle.com>
date Fri, 06 Jun 2014 19:46:16 +0200
parents 74e142bd2b12
children fa04403d1cb5
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java
diffstat 1 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java	Fri Jun 06 22:13:00 2014 -0700
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java	Fri Jun 06 19:46:16 2014 +0200
@@ -90,15 +90,19 @@
     }
 
     private static boolean isArgMoreInformativeThanParam(ValueNode arg, ParameterNode param) {
-        if (arg.isConstant()) {
-            return true;
-        } else {
-            Stamp joinedStamp = param.stamp().join(arg.stamp());
-            if (joinedStamp != null && !joinedStamp.equals(param.stamp())) {
-                return true;
-            }
+        return arg.isConstant() || canStampBeImproved(arg, param);
+    }
+
+    private static boolean canStampBeImproved(ValueNode arg, ParameterNode param) {
+        return improvedStamp(arg, param) != null;
+    }
+
+    private static Stamp improvedStamp(ValueNode arg, ParameterNode param) {
+        Stamp joinedStamp = param.stamp().join(arg.stamp());
+        if (joinedStamp == null || joinedStamp.equals(param.stamp())) {
+            return null;
         }
-        return false;
+        return joinedStamp;
     }
 
     /**
@@ -140,9 +144,9 @@
                     graph.replaceFloating(param, ConstantNode.forConstant(constant, context.getMetaAccess(), graph));
                     // param-node gone, leaving a gap in the sequence given by param.index()
                 } else {
-                    Stamp joinedStamp = param.stamp().join(arg.stamp());
-                    if (joinedStamp != null && !joinedStamp.equals(param.stamp())) {
-                        param.setStamp(joinedStamp);
+                    Stamp impro = improvedStamp(arg, param);
+                    if (impro != null) {
+                        param.setStamp(impro);
                         parameterUsages = trackParameterUsages(param, parameterUsages);
                     } else {
                         assert !isArgMoreInformativeThanParam(arg, param);