changeset 12695:4aec62c32a82

Helper functions for identifying numeric kinds.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 06 Nov 2013 16:29:54 +0100
parents 65513c398fd2
children 22780dc399da
files graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Constant.java graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java
diffstat 17 files changed, 40 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Constant.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Constant.java	Wed Nov 06 16:29:54 2013 +0100
@@ -194,7 +194,7 @@
      * @return the constant value
      */
     public long asLong() {
-        assert getKind() == Kind.Long || getKind().getStackKind() == Kind.Int;
+        assert getKind().isNumericInteger();
         return primitive;
     }
 
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java	Wed Nov 06 16:29:54 2013 +0100
@@ -117,6 +117,24 @@
     }
 
     /**
+     * Checks whether this type is a Java primitive type representing an integer number.
+     * 
+     * @return {@code true} if the stack kind is {@link #Int} or {@link #Long}.
+     */
+    public boolean isNumericInteger() {
+        return isStackInt || this == Kind.Long;
+    }
+
+    /**
+     * Checks whether this type is a Java primitive type representing a floating point number.
+     * 
+     * @return {@code true} if this is {@link #Float} or {@link #Double}.
+     */
+    public boolean isNumericFloat() {
+        return this == Kind.Float || this == Kind.Double;
+    }
+
+    /**
      * Returns the kind corresponding to the Java type string.
      * 
      * @param typeString the Java type string
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java	Wed Nov 06 16:29:54 2013 +0100
@@ -279,7 +279,7 @@
     }
 
     private void emitIntegerTest(Value a, Value b) {
-        assert a.getKind().getStackKind() == Kind.Int || a.getKind() == Kind.Long;
+        assert a.getKind().isNumericInteger();
         if (LIRValueUtil.isVariable(b)) {
             append(new AMD64TestOp(load(b), loadNonConst(a)));
         } else {
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Wed Nov 06 16:29:54 2013 +0100
@@ -414,7 +414,7 @@
 
     private void emitIntegerTest(Value a, Value b) {
 
-        assert a.getKind().getStackKind() == Kind.Int || a.getKind() == Kind.Long;
+        assert a.getKind().isNumericInteger();
 
         if (LIRValueUtil.isVariable(b)) {
             append(new PTXTestOp(load(b), loadNonConst(a), nextPredRegNum));
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Wed Nov 06 16:29:54 2013 +0100
@@ -267,7 +267,7 @@
     }
 
     private void emitIntegerTest(Value a, Value b) {
-        assert a.getKind().getStackKind() == Kind.Int || a.getKind() == Kind.Long;
+        assert a.getKind().isNumericInteger();
         if (LIRValueUtil.isVariable(b)) {
             append(new SPARCTestOp(load(b), loadNonConst(a)));
         } else {
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed Nov 06 16:29:54 2013 +0100
@@ -747,7 +747,7 @@
         ValueNode b = mirror ? x : y;
 
         CompareNode condition;
-        assert a.kind() != Kind.Double && a.kind() != Kind.Float;
+        assert !a.kind().isNumericFloat();
         if (cond == Condition.EQ || cond == Condition.NE) {
             if (a.kind() == Kind.Object) {
                 condition = new ObjectEqualsNode(a, b);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java	Wed Nov 06 16:29:54 2013 +0100
@@ -186,7 +186,7 @@
      * including long constants that fit into the 32-bit range.
      */
     public int asIntConst(Value value) {
-        assert (value.getKind().getStackKind() == Kind.Int || value.getKind() == Kind.Long) && isConstant(value);
+        assert (value.getKind().isNumericInteger()) && isConstant(value);
         Constant constant = (Constant) value;
         assert !codeCache.needsDataPatch(constant) : constant + " should be in a DataPatch";
         long c = constant.asLong();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -147,22 +147,22 @@
     public static CompareNode createCompareNode(StructuredGraph graph, Condition condition, ValueNode x, ValueNode y) {
         assert x.kind() == y.kind();
         assert condition.isCanonical() : "condition is not canonical: " + condition;
-        assert x.kind() != Kind.Double && x.kind() != Kind.Float;
+        assert !x.kind().isNumericFloat();
 
         CompareNode comparison;
         if (condition == Condition.EQ) {
             if (x.kind() == Kind.Object) {
                 comparison = new ObjectEqualsNode(x, y);
             } else {
-                assert x.kind().getStackKind() == Kind.Int || x.kind() == Kind.Long;
+                assert x.kind().isNumericInteger();
                 comparison = new IntegerEqualsNode(x, y);
             }
         } else if (condition == Condition.LT) {
-            assert x.kind().getStackKind() == Kind.Int || x.kind() == Kind.Long;
+            assert x.kind().isNumericInteger();
             comparison = new IntegerLessThanNode(x, y);
         } else {
             assert condition == Condition.BT;
-            assert x.kind().getStackKind() == Kind.Int || x.kind() == Kind.Long;
+            assert x.kind().isNumericInteger();
             comparison = new IntegerBelowThanNode(x, y);
         }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java	Wed Nov 06 16:29:54 2013 +0100
@@ -322,7 +322,7 @@
      *         the comparison is known to be false
      */
     public boolean foldCondition(Constant lt, Constant rt, ConstantReflectionProvider constantReflection) {
-        assert lt.getKind() != Kind.Double && lt.getKind() != Kind.Float && rt.getKind() != Kind.Double && rt.getKind() != Kind.Float;
+        assert !lt.getKind().isNumericFloat() && !rt.getKind().isNumericFloat();
         return foldCondition(lt, rt, constantReflection, false);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -32,6 +32,7 @@
 
     public FloatArithmeticNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
         super(kind, x, y);
+        assert kind.isNumericFloat();
         this.isStrictFP = isStrictFP;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -97,7 +97,7 @@
 
     public static boolean isIntegerAddition(ValueNode result, ValueNode a, ValueNode b) {
         Kind kind = result.kind();
-        if (kind != a.kind() || kind != b.kind() || !(kind.getStackKind() == Kind.Int || kind == Kind.Long)) {
+        if (kind != a.kind() || kind != b.kind() || !kind.isNumericInteger()) {
             return false;
         }
         if (result.isConstant() && a.isConstant() && b.isConstant()) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -30,7 +30,7 @@
 
     public IntegerArithmeticNode(Kind kind, ValueNode x, ValueNode y) {
         super(kind, x, y);
-        assert kind == Kind.Int || kind == Kind.Long;
+        assert kind.isNumericInteger();
     }
 
     public static IntegerAddNode add(StructuredGraph graph, ValueNode v1, ValueNode v2) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -39,8 +39,8 @@
      */
     public IntegerBelowThanNode(ValueNode x, ValueNode y) {
         super(x, y);
-        assert x.kind() != Kind.Double && x.kind() != Kind.Float && x.kind() != Kind.Object;
-        assert y.kind() != Kind.Double && y.kind() != Kind.Float && y.kind() != Kind.Object;
+        assert !x.kind().isNumericFloat() && x.kind() != Kind.Object;
+        assert !y.kind().isNumericFloat() && y.kind() != Kind.Object;
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -38,8 +38,8 @@
      */
     public IntegerEqualsNode(ValueNode x, ValueNode y) {
         super(x, y);
-        assert x.kind() != Kind.Double && x.kind() != Kind.Float && x.kind() != Kind.Object;
-        assert y.kind() != Kind.Double && y.kind() != Kind.Float && y.kind() != Kind.Object;
+        assert !x.kind().isNumericFloat() && x.kind() != Kind.Object;
+        assert !y.kind().isNumericFloat() && y.kind() != Kind.Object;
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -39,8 +39,8 @@
      */
     public IntegerLessThanNode(ValueNode x, ValueNode y) {
         super(x, y);
-        assert x.kind() != Kind.Double && x.kind() != Kind.Float && x.kind() != Kind.Object;
-        assert y.kind() != Kind.Double && y.kind() != Kind.Float && y.kind() != Kind.Object;
+        assert !x.kind().isNumericFloat() && x.kind() != Kind.Object;
+        assert !y.kind().isNumericFloat() && y.kind() != Kind.Object;
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -77,7 +77,7 @@
                             return ConstantNode.forConstant(constant, metaAccess, read.graph());
                         }
                     }
-                } else if (object.kind() == Kind.Long || object.kind().getStackKind() == Kind.Int) {
+                } else if (object.kind().isNumericInteger()) {
                     long base = object.asConstant().asLong();
                     if (base != 0L) {
                         Constant constant = tool.getConstantReflection().readUnsafeConstant(kind, null, base + displacement, compressible);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java	Wed Nov 06 16:01:03 2013 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java	Wed Nov 06 16:29:54 2013 +0100
@@ -38,7 +38,7 @@
 
     public ReverseBytesNode(ValueNode value) {
         super(StampFactory.forKind(value.kind()));
-        assert kind().getStackKind() == Kind.Int || kind() == Kind.Long;
+        assert kind().isNumericInteger();
         this.value = value;
     }