< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ArrayEqualsNode.java

Print this page
rev 52509 : [mq]: graal

@@ -84,22 +84,10 @@
         this.array1 = array1;
         this.array2 = array2;
         this.length = length;
     }
 
-    public ValueNode getArray1() {
-        return array1;
-    }
-
-    public ValueNode getArray2() {
-        return array2;
-    }
-
-    public ValueNode getLength() {
-        return length;
-    }
-
     private static boolean isNaNFloat(JavaConstant constant) {
         JavaKind kind = constant.getJavaKind();
         return (kind == JavaKind.Float && Float.isNaN(constant.asFloat())) || (kind == JavaKind.Double && Double.isNaN(constant.asDouble()));
     }
 

@@ -155,18 +143,18 @@
                     if (entry1 != entry2) {
                         if (entry1 instanceof ConstantNode && entry2 instanceof ConstantNode) {
                             // Float NaN constants are different constant nodes but treated as
                             // equal in Arrays.equals([F[F) or Arrays.equals([D[D).
                             if (entry1.getStackKind() == JavaKind.Float && entry2.getStackKind() == JavaKind.Float) {
-                                float value1 = ((JavaConstant) ((ConstantNode) entry1).asConstant()).asFloat();
-                                float value2 = ((JavaConstant) ((ConstantNode) entry2).asConstant()).asFloat();
+                                float value1 = ((JavaConstant) entry1.asConstant()).asFloat();
+                                float value2 = ((JavaConstant) entry2.asConstant()).asFloat();
                                 if (Float.floatToIntBits(value1) != Float.floatToIntBits(value2)) {
                                     allEqual = false;
                                 }
                             } else if (entry1.getStackKind() == JavaKind.Double && entry2.getStackKind() == JavaKind.Double) {
-                                double value1 = ((JavaConstant) ((ConstantNode) entry1).asConstant()).asDouble();
-                                double value2 = ((JavaConstant) ((ConstantNode) entry2).asConstant()).asDouble();
+                                double value1 = ((JavaConstant) entry1.asConstant()).asDouble();
+                                double value2 = ((JavaConstant) entry2.asConstant()).asDouble();
                                 if (Double.doubleToLongBits(value1) != Double.doubleToLongBits(value2)) {
                                     allEqual = false;
                                 }
                             } else {
                                 allEqual = false;

@@ -224,11 +212,15 @@
         return equals(array1, array2, length, JavaKind.Double);
     }
 
     @Override
     public void generate(NodeLIRBuilderTool gen) {
-        Value result = gen.getLIRGeneratorTool().emitArrayEquals(kind, gen.operand(array1), gen.operand(array2), gen.operand(length));
+        int constantLength = -1;
+        if (length.isConstant()) {
+            constantLength = length.asJavaConstant().asInt();
+        }
+        Value result = gen.getLIRGeneratorTool().emitArrayEquals(kind, gen.operand(array1), gen.operand(array2), gen.operand(length), constantLength, false);
         gen.setResult(this, result);
     }
 
     @Override
     public LocationIdentity getLocationIdentity() {
< prev index next >