changeset 20871:762e03b40d3d

Fix unsigned remainder graph builder plugin.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 09 Apr 2015 17:50:15 +0200
parents 5e9dc1535b62
children b1700db197c7
files graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsignedIntegerTest.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java
diffstat 2 files changed, 86 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsignedIntegerTest.java	Thu Apr 09 17:50:15 2015 +0200
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.replacements.test;
+
+import org.junit.*;
+
+import com.oracle.graal.compiler.test.*;
+
+/**
+ * Tests the unsigned operations on {@link Integer} and {@link Long}.
+ */
+public class UnsignedIntegerTest extends GraalCompilerTest {
+
+    public static int compareInteger(int a, int b) {
+        return Integer.compareUnsigned(a, b);
+    }
+
+    public static int divideInteger(int a, int b) {
+        return Integer.divideUnsigned(a, b);
+    }
+
+    public static int remainderInteger(int a, int b) {
+        return Integer.remainderUnsigned(a, b);
+    }
+
+    public static long compareLong(long a, long b) {
+        return Long.compareUnsigned(a, b);
+    }
+
+    public static long divideLong(long a, long b) {
+        return Long.divideUnsigned(a, b);
+    }
+
+    public static long remainderLong(long a, long b) {
+        return Long.remainderUnsigned(a, b);
+    }
+
+    private void testInteger(int a, int b) {
+        test("compareInteger", a, b);
+        test("divideInteger", a, b);
+        test("remainderInteger", a, b);
+    }
+
+    private void testLong(long a, long b) {
+        test("compareLong", a, b);
+        test("divideLong", a, b);
+        test("remainderLong", a, b);
+    }
+
+    @Test
+    public void testInteger() {
+        testInteger(5, 7);
+        testInteger(-3, -7);
+        testInteger(-3, 7);
+        testInteger(42, -5);
+    }
+
+    @Test
+    public void testLong() {
+        testLong(5, 7);
+        testLong(-3, -7);
+        testLong(-3, 7);
+        testLong(42, -5);
+    }
+}
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java	Thu Apr 09 17:47:52 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java	Thu Apr 09 17:50:15 2015 +0200
@@ -176,7 +176,7 @@
         });
         r.register2("remainderUnsigned", type, type, new InvocationPlugin() {
             public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode dividend, ValueNode divisor) {
-                b.push(kind, b.recursiveAppend(new UnsignedDivNode(dividend, divisor).canonical(null, dividend, divisor)));
+                b.push(kind, b.recursiveAppend(new UnsignedRemNode(dividend, divisor).canonical(null, dividend, divisor)));
                 return true;
             }
         });