changeset 3207:f4b46a224d90

Replace Compare with NormalizeComparison and constant 0 as inputs with a single Compare; correct/remove encountered wrong comments
author Peter Hofer <peter.hofer@jku.at>
date Mon, 11 Jul 2011 17:52:58 +0200
parents 0e03231b46ba
children 9fcb0ef7f5c5
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java
diffstat 3 files changed, 21 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Mon Jul 11 13:41:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Mon Jul 11 17:52:58 2011 +0200
@@ -81,7 +81,7 @@
     boolean unorderedIsTrue;
 
     /**
-     * Constructs a new If instruction.
+     * Constructs a new Compare instruction.
      * @param x the instruction producing the first input to the instruction
      * @param condition the condition (comparison operation)
      * @param y the instruction that produces the second input to this instruction
@@ -121,7 +121,7 @@
     }
 
     /**
-     * Swaps the operands to this if and reverses the condition (e.g. > goes to <=).
+     * Swaps the operands to this if and mirrors the condition (e.g. > becomes <).
      * @see Condition#mirror()
      */
     public void swapOperands() {
@@ -188,6 +188,10 @@
                 return optimizeMaterialize(compare, compare.x().asConstant(), (MaterializeNode) compare.y());
             } else if (compare.y().isConstant() && compare.x() instanceof MaterializeNode) {
                 return optimizeMaterialize(compare, compare.y().asConstant(), (MaterializeNode) compare.x());
+            } else if (compare.x().isConstant() && compare.y() instanceof NormalizeCompare) {
+                return optimizeNormalizeCmp(compare, compare.x().asConstant(), (NormalizeCompare) compare.y());
+            } else if (compare.y().isConstant() && compare.x() instanceof NormalizeCompare) {
+                return optimizeNormalizeCmp(compare, compare.y().asConstant(), (NormalizeCompare) compare.x());
             }
             return compare;
         }
@@ -211,5 +215,20 @@
             }
             return compare;
         }
+
+        private Node optimizeNormalizeCmp(Compare compare, CiConstant constant, NormalizeCompare normalizeNode) {
+            if (constant.kind == CiKind.Int && constant.asInt() == 0) {
+                Condition condition = compare.condition();
+                if (normalizeNode == compare.y()) {
+                    condition = condition.mirror();
+                }
+                Compare result = new Compare(normalizeNode.x(), condition, normalizeNode.y(), compare.graph());
+                if (GraalOptions.TraceCanonicalizer) {
+                    TTY.println("Replaced Compare+NormalizeCompare with " + result);
+                }
+                return result;
+            }
+            return compare;
+        }
     };
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java	Mon Jul 11 13:41:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java	Mon Jul 11 17:52:58 2011 +0200
@@ -29,9 +29,6 @@
 import com.oracle.max.graal.graph.*;
 import com.sun.cri.ci.*;
 
-/**
- * The {@code Convert} class represents a conversion between primitive types.
- */
 public final class MaterializeNode extends FloatingNode {
 
     private static final int INPUT_COUNT = 1;
@@ -60,13 +57,6 @@
         inputs().set(super.inputCount() + INPUT_VALUE, n);
     }
 
-    /**
-     * Constructs a new Convert instance.
-     * @param opcode the bytecode representing the operation
-     * @param value the instruction producing the input value
-     * @param kind the result type of this instruction
-     * @param graph
-     */
     public MaterializeNode(Value value, Graph graph) {
         super(CiKind.Int, INPUT_COUNT, SUCCESSOR_COUNT, graph);
         setValue(value);
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java	Mon Jul 11 13:41:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java	Mon Jul 11 17:52:58 2011 +0200
@@ -27,9 +27,6 @@
 import com.oracle.max.graal.graph.*;
 import com.sun.cri.ci.*;
 
-/**
- * The {@code ArrayLength} instruction gets the length of an array.
- */
 public final class NegateBooleanNode extends BooleanNode {
     private static final int INPUT_COUNT = 1;
     private static final int INPUT_NODE = 0;
@@ -57,11 +54,6 @@
         return (Value) inputs().set(super.inputCount() + INPUT_NODE, n);
     }
 
-    /**
-     * Constructs a new ArrayLength instruction.
-     * @param array the instruction producing the array
-     * @param newFrameState the state after executing this instruction
-     */
     public NegateBooleanNode(Value value, Graph graph) {
         super(CiKind.Int, INPUT_COUNT, SUCCESSOR_COUNT, graph);
         setValue(value);