aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2017-05-02 15:19:07 +0000
committerTamar Christina <tnfchris@gcc.gnu.org>2017-05-02 15:19:07 +0000
commitcc5b8f3d568e95ce74e03d8d87ada71117a6c106 (patch)
tree9466e3e211c6783f0f35e6a524d4b1e5772df60a /gcc/testsuite
parentc8429337386348018079e683ac3bfd35c51672d0 (diff)
downloadgcc-cc5b8f3d568e95ce74e03d8d87ada71117a6c106.zip
gcc-cc5b8f3d568e95ce74e03d8d87ada71117a6c106.tar.gz
gcc-cc5b8f3d568e95ce74e03d8d87ada71117a6c106.tar.bz2
simplify-rtx.c (simplify_binary_operation_1): Add LSHIFTRT case.
gcc/ 2017-04-27 Tamar Christina <tamar.christina@arm.com> * simplify-rtx.c (simplify_binary_operation_1): Add LSHIFTRT case. gcc/testsuite/ 2017-04-27 Tamar Christina <tamar.christina@arm.com> * gcc.dg/lsr-div1.c: New testcase. From-SVN: r247504
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/lsr-div1.c57
2 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d47aa91..759a603 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-04-27 Tamar Christina <tamar.christina@arm.com>
+
+ * gcc.dg/lsr-div1.c: New testcase.
+
2017-05-02 Sebastian Peryt <sebastian.peryt@intel.com>
* gcc.target/i386/avx512f-vaddsd-1.c (_mm_mask_add_sd)
diff --git a/gcc/testsuite/gcc.dg/lsr-div1.c b/gcc/testsuite/gcc.dg/lsr-div1.c
new file mode 100644
index 0000000..962054d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lsr-div1.c
@@ -0,0 +1,57 @@
+/* Test division by const int generates only one shift. */
+/* { dg-do run } */
+/* { dg-options "-O2 -fdump-rtl-combine-all" } */
+/* { dg-options "-O2 -fdump-rtl-combine-all -mtune=cortex-a53" { target aarch64*-*-* } } */
+/* { dg-require-effective-target int32plus } */
+
+extern void abort (void);
+
+#define NOINLINE __attribute__((noinline))
+
+static NOINLINE int
+f1 (unsigned int n)
+{
+ return n % 0x33;
+}
+
+static NOINLINE int
+f2 (unsigned int n)
+{
+ return n % 0x12;
+}
+
+int
+main ()
+{
+ int a = 0xaaaaaaaa;
+ int b = 0x55555555;
+ int c;
+ c = f1 (a);
+ if (c != 0x11)
+ abort ();
+ c = f1 (b);
+ if (c != 0x22)
+ abort ();
+ c = f2 (a);
+ if (c != 0xE)
+ abort ();
+ c = f2 (b);
+ if (c != 0x7)
+ abort ();
+ return 0;
+}
+
+/* Following replacement pattern of intger division by constant, GCC is expected
+ to generate UMULL and (x)SHIFTRT. This test checks that considering division
+ by const 0x33, gcc generates a single LSHIFTRT by 37, instead of
+ two - LSHIFTRT by 32 and LSHIFTRT by 5. */
+
+/* { dg-final { scan-rtl-dump "\\(set \\(subreg:DI \\(reg:SI" "combine" { target aarch64*-*-* } } } */
+/* { dg-final { scan-rtl-dump "\\(lshiftrt:DI \\(reg:DI" "combine" { target aarch64*-*-* } } } */
+/* { dg-final { scan-rtl-dump "\\(const_int 37 " "combine" { target aarch64*-*-* } } } */
+
+/* Similarly, considering division by const 0x12, gcc generates a
+ single LSHIFTRT by 34, instead of two - LSHIFTRT by 32 and LSHIFTRT by 2. */
+
+/* { dg-final { scan-rtl-dump "\\(const_int 34 " "combine" { target aarch64*-*-* } } } */
+