Mercurial > hg > graal-compiler
changeset 19946:a3ffdf6ec408
Relax asserts in ArrayEqualsNodes
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Tue, 17 Mar 2015 19:24:47 -0700 |
parents | f2bdbfe9201b |
children | 6a0692faf9fd |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java |
diffstat | 1 files changed, 28 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- 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) {