re PR middle-end/28402 (Doubleword shifts implemented using word_mode libcalls)
authorRichard Sandiford <richard@codesourcery.com>
Mon, 17 Jul 2006 15:29:19 +0000 (15:29 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 17 Jul 2006 15:29:19 +0000 (15:29 +0000)
gcc/
PR middle-end/28402
* optabs.c (expand_binop): Pass next_methods rather than methods
to expand_doubleword_shift.

gcc/testsuite/
PR middle-end/28402
* gcc.dg/pr28402.c: New test.

From-SVN: r115524

gcc/ChangeLog
gcc/optabs.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr28402.c [new file with mode: 0644]

index 4a142d644e79096d0b73930cd5c100ef180bcfeb..e9dba8e499521ac1d731a3c3a58e9e80a8edcfe6 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-17  Richard Sandiford  <richard@codesourcery.com>
+
+       PR middle-end/28402
+       * optabs.c (expand_binop): Pass next_methods rather than methods
+       to expand_doubleword_shift.
+
 2006-07-17  J"orn Rennecke  <joern.rennecke@st.com>
 
        PR other/28251
index a961bd49b53a68150d79842eac67d60d0e1dc8d2..a8be6f98ce3274de6d9490b004b648cdb35e8672 100644 (file)
@@ -1558,7 +1558,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
          if (expand_doubleword_shift (op1_mode, binoptab,
                                       outof_input, into_input, op1,
                                       outof_target, into_target,
-                                      unsignedp, methods, shift_mask))
+                                      unsignedp, next_methods, shift_mask))
            {
              insns = get_insns ();
              end_sequence ();
index 256bd1c80d82db988f4d24d1354c62dc8c6ee19b..e79fd296a7e9a4e07bd694093ece25fb43b7b0f5 100644 (file)
@@ -1,3 +1,8 @@
+2006-07-17  Richard Sandiford  <richard@codesourcery.com>
+
+       PR middle-end/28402
+       * gcc.dg/pr28402.c: New test.
+
 2006-07-17  Steve Ellcey  <sje@cup.hp.com>
 
        PR c++/28304
diff --git a/gcc/testsuite/gcc.dg/pr28402.c b/gcc/testsuite/gcc.dg/pr28402.c
new file mode 100644 (file)
index 0000000..1390eca
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-options "" } */
+typedef long long ll;
+typedef unsigned long long ull;
+
+int global;
+
+#define A(BASE, OP, AMT) \
+  ll BASE ## AMT (ll x) { return x OP AMT; } \
+  ull BASE ## AMT ## u (ull x) { return x OP AMT; }
+
+#define B(BASE, OP) \
+  A (BASE, OP, 1) \
+  A (BASE, OP, 10) \
+  A (BASE, OP, 31) \
+  A (BASE, OP, 33) \
+  A (BASE, OP, 61) \
+  A (BASE, OP, global)
+
+B (left, <<)
+B (right, >>)
+
+/* { dg-final { scan-assembler-not "__\[a-z\]*si3" } } */
+typedef unsigned long long ll;
+typedef unsigned long long ull;
+
+int global;
+
+#define A(BASE, OP, AMT) \
+  ll BASE ## AMT (ll x) { return x OP AMT; } \
+  ull BASE ## AMT ## u (ull x) { return x OP AMT; }
+
+#define B(BASE, OP) \
+  A (BASE, OP, 1) \
+  A (BASE, OP, 10) \
+  A (BASE, OP, 31) \
+  A (BASE, OP, 33) \
+  A (BASE, OP, 61) \
+  A (BASE, OP, global)
+
+B (left, <<)
+B (right, >>)
+
+/* { dg-final { scan-assembler-not "__\[a-z\]*si3" } } */