changeset 23137:23c58fe0a582

improved readability of test for which instanceof usages can be materialized
author Doug Simon <doug.simon@oracle.com>
date Fri, 04 Dec 2015 14:03:02 +0100
parents 12b57821cc0b
children 07f7a8d2de57
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Fri Dec 04 14:02:31 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Fri Dec 04 14:03:02 2015 +0100
@@ -110,8 +110,7 @@
      */
     protected InstanceOfUsageReplacer createReplacer(FloatingNode instanceOf, Instantiation instantiation, Node usage, final StructuredGraph graph) {
         InstanceOfUsageReplacer replacer;
-        if ((usage instanceof ConditionalNode && !(((ConditionalNode) usage).trueValue().isConstant() && ((ConditionalNode) usage).falseValue().isConstant())) || usage instanceof IfNode ||
-                        usage instanceof FixedGuardNode || usage instanceof ShortCircuitOrNode || usage instanceof ConditionAnchorNode) {
+        if (!canMaterialize(usage)) {
             ValueNode trueValue = ConstantNode.forInt(1, graph);
             ValueNode falseValue = ConstantNode.forInt(0, graph);
             if (instantiation.isInitialized() && (trueValue != instantiation.trueValue || falseValue != instantiation.falseValue)) {
@@ -132,6 +131,20 @@
     }
 
     /**
+     * Determines if an {@code instanceof} usage can be materialized.
+     */
+    protected boolean canMaterialize(Node usage) {
+        if (usage instanceof ConditionalNode) {
+            ConditionalNode cn = (ConditionalNode) usage;
+            return cn.trueValue().isConstant() && cn.falseValue().isConstant();
+        }
+        if (usage instanceof IfNode || usage instanceof FixedGuardNode || usage instanceof ShortCircuitOrNode || usage instanceof ConditionAnchorNode) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * The result of instantiating an instanceof snippet. This enables a snippet instantiation to be
      * re-used which reduces compile time and produces better code.
      */