< 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]: graal2

*** 84,105 **** 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())); } --- 84,93 ----
*** 155,172 **** 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(); 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(); if (Double.doubleToLongBits(value1) != Double.doubleToLongBits(value2)) { allEqual = false; } } else { allEqual = false; --- 143,160 ---- 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) 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) entry1.asConstant()).asDouble(); ! double value2 = ((JavaConstant) entry2.asConstant()).asDouble(); if (Double.doubleToLongBits(value1) != Double.doubleToLongBits(value2)) { allEqual = false; } } else { allEqual = false;
*** 224,234 **** 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)); gen.setResult(this, result); } @Override public LocationIdentity getLocationIdentity() { --- 212,226 ---- return equals(array1, array2, length, JavaKind.Double); } @Override public void generate(NodeLIRBuilderTool gen) { ! 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 >