# HG changeset patch # User Tom Rodriguez # Date 1426645487 25200 # Node ID a3ffdf6ec40885b1f64a31e5b07e2ecb4576b3cd # Parent f2bdbfe9201b783e21cb3b35f1d21b26eb56a98f Relax asserts in ArrayEqualsNodes diff -r f2bdbfe9201b -r a3ffdf6ec408 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Tue Mar 17 19:21:57 2015 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Tue Mar 17 19:24:47 2015 -0700 @@ -53,13 +53,9 @@ @OptionalInput(InputType.Memory) MemoryNode lastLocationAccess; - public ArrayEqualsNode(ValueNode array1, ValueNode array2, ValueNode length) { + public ArrayEqualsNode(ValueNode array1, ValueNode array2, ValueNode length, @ConstantNodeParameter Kind kind) { super(TYPE, StampFactory.forKind(Kind.Boolean)); - // Ignore nullness in stamp equality test - assert array1.stamp().join(StampFactory.objectNonNull()).equals(array2.stamp().join(StampFactory.objectNonNull())); - ObjectStamp array1Stamp = (ObjectStamp) array1.stamp(); - ResolvedJavaType componentType = array1Stamp.type().getComponentType(); - this.kind = componentType.getKind(); + this.kind = kind; this.array1 = array1; this.array2 = array2; this.length = length; @@ -109,28 +105,39 @@ } @NodeIntrinsic - public static native boolean equals(boolean[] array1, boolean[] array2, int length); + public static native boolean equals(Object array1, Object array2, int length, @ConstantNodeParameter Kind kind); - @NodeIntrinsic - public static native boolean equals(byte[] array1, byte[] array2, int length); + public static boolean equals(boolean[] array1, boolean[] array2, int length) { + return equals(array1, array2, length, Kind.Boolean); + } - @NodeIntrinsic - public static native boolean equals(char[] array1, char[] array2, int length); + public static boolean equals(byte[] array1, byte[] array2, int length) { + return equals(array1, array2, length, Kind.Byte); + } - @NodeIntrinsic - public static native boolean equals(short[] array1, short[] array2, int length); + public static boolean equals(char[] array1, char[] array2, int length) { + return equals(array1, array2, length, Kind.Char); + } - @NodeIntrinsic - public static native boolean equals(int[] array1, int[] array2, int length); + public static boolean equals(short[] array1, short[] array2, int length) { + return equals(array1, array2, length, Kind.Short); + } - @NodeIntrinsic - public static native boolean equals(long[] array1, long[] array2, int length); + public static boolean equals(int[] array1, int[] array2, int length) { + return equals(array1, array2, length, Kind.Int); + } - @NodeIntrinsic - public static native boolean equals(float[] array1, float[] array2, int length); + public static boolean equals(long[] array1, long[] array2, int length) { + return equals(array1, array2, length, Kind.Long); + } - @NodeIntrinsic - public static native boolean equals(double[] array1, double[] array2, int length); + public static boolean equals(float[] array1, float[] array2, int length) { + return equals(array1, array2, length, Kind.Float); + } + + public static boolean equals(double[] array1, double[] array2, int length) { + return equals(array1, array2, length, Kind.Double); + } @Override public void generate(NodeLIRBuilderTool gen) {