< 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 >