aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2006-07-17 15:29:19 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2006-07-17 15:29:19 +0000
commitf8bdb931a97bcd90dd47cfcd3b4fbabf1872a84f (patch)
tree8cfddf5a3cfaa67dde48fbb4db6998a680d1afed
parent77bffd4cee22d47afd683172ad0a91e4c4cd4990 (diff)
downloadgcc-f8bdb931a97bcd90dd47cfcd3b4fbabf1872a84f.zip
gcc-f8bdb931a97bcd90dd47cfcd3b4fbabf1872a84f.tar.gz
gcc-f8bdb931a97bcd90dd47cfcd3b4fbabf1872a84f.tar.bz2
re PR middle-end/28402 (Doubleword shifts implemented using word_mode libcalls)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/optabs.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr28402.c43
4 files changed, 55 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4a142d6..e9dba8e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/optabs.c b/gcc/optabs.c
index a961bd4..a8be6f9 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -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 ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 256bd1c8..e79fd29 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..1390eca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr28402.c
@@ -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" } } */