aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/multiword-1.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2007-08-07 10:43:11 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2007-08-07 10:43:11 +0000
commite0892570a834b3230ad3d85fe37e7ea5398cab6e (patch)
tree65bb0f6c5ac23824ac9750984b2fb4f75c7c7409 /gcc/testsuite/gcc.dg/multiword-1.c
parente492980b7349436c6a473e4950b54d0f0bd8b772 (diff)
downloadgcc-e0892570a834b3230ad3d85fe37e7ea5398cab6e.zip
gcc-e0892570a834b3230ad3d85fe37e7ea5398cab6e.tar.gz
gcc-e0892570a834b3230ad3d85fe37e7ea5398cab6e.tar.bz2
lower-subreg.c (resolve_subreg_use): Remove assertion.
2007-08-07 Andreas Krebbel <krebbel1@de.ibm.com> * lower-subreg.c (resolve_subreg_use): Remove assertion. (find_decomposable_shift_zext, resolve_shift_zext): New functions. (decompose_multiword_subregs): Use the functions above to decompose multiword shifts and zero-extends. 2007-08-07 Andreas Krebbel <krebbel1@de.ibm.com> * gcc.dg/multiword-1.c: New testcase. From-SVN: r127270
Diffstat (limited to 'gcc/testsuite/gcc.dg/multiword-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/multiword-1.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/multiword-1.c b/gcc/testsuite/gcc.dg/multiword-1.c
new file mode 100644
index 0000000..c081617
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/multiword-1.c
@@ -0,0 +1,68 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+/* { dg-require-effective-target ilp32 } */
+
+typedef unsigned int u32;
+typedef unsigned long long u64;
+
+u64 __attribute__((noinline))
+foo (u32 high, u32 low)
+{
+ return ((u64)high << 32) | low;
+}
+
+u32 __attribute__((noinline))
+right (u64 t)
+{
+ return (u32)(t >> 32);
+}
+
+u64 __attribute__((noinline))
+left (u32 t)
+{
+ return (u64)t << 32;
+}
+
+u32 __attribute__((noinline))
+right2 (u64 t)
+{
+ return (u32)(t >> 40);
+}
+
+u64 __attribute__((noinline))
+left2 (u32 t)
+{
+ return (u64)t << 40;
+}
+
+u64 __attribute__((noinline))
+zeroextend (u32 t)
+{
+ return (u64)t;
+}
+
+extern void abort ();
+
+int
+main ()
+{
+ if (foo (13000, 12000) != 55834574860000ULL)
+ abort ();
+
+ if (right (55834574860000ULL) != 13000)
+ abort ();
+
+ if (left (13000) != 55834574848000ULL)
+ abort ();
+
+ if (right2 (55834574860000ULL) != 50)
+ abort ();
+
+ if (left2 (13000) != 14293651161088000ULL)
+ abort ();
+
+ if (zeroextend (13000) != 13000ULL)
+ abort ();
+
+ return 0;
+}