aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2015-05-27 15:13:25 -0600
committerJeff Law <law@gcc.gnu.org>2015-05-27 15:13:25 -0600
commitb60685a379cabc5be2a633696318fb0364b45a78 (patch)
tree6305227d026e8f9a61cead8154aa08900a9fda30 /gcc
parent8ed501f167373f40d9a5187323b5771725550b69 (diff)
downloadgcc-b60685a379cabc5be2a633696318fb0364b45a78.zip
gcc-b60685a379cabc5be2a633696318fb0364b45a78.tar.gz
gcc-b60685a379cabc5be2a633696318fb0364b45a78.tar.bz2
re PR target/39726 ([cond-optab] ColdFire pessimizations on QImode/HImode tests)
PR target/39726 * gcc.dg/target/m68k/pr39726-1.c: New test. From-SVN: r223781
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/m68k/pr39726.c65
3 files changed, 71 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 76bb537..6528d42 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -2964,6 +2964,7 @@
2015-05-07 Jeff Law <law@redhat.com>
+ PR target/39726
* match.pd (bit_and (plus/minus (convert @0) (convert @1) mask): New
simplifier to narrow arithmetic.
* generic-match-head.c: (types_match, single_use): New functions.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1923a2f..a1a242e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-27 Jeff Law <law@redhat.com>
+
+ PR target/39726
+ * gcc.dg/target/m68k/pr39726-1.c: New test.
+
2015-05-27 Nathan Sidwell <nathan@acm.org>
PR c++/66270
diff --git a/gcc/testsuite/gcc.target/m68k/pr39726.c b/gcc/testsuite/gcc.target/m68k/pr39726.c
new file mode 100644
index 0000000..94d41ba
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/pr39726.c
@@ -0,0 +1,65 @@
+/* { dg-do assemble } /*
+/* { dg-options "-O2 -fomit-frame-pointer" } */
+/* { dg-final { object-size text <= 228 } } */
+
+unsigned char v;
+
+int a0bs (unsigned char u, unsigned char w)
+{
+ if ((u - w) & 0x80)
+ v = 1;
+}
+
+int a1bs (unsigned char u, unsigned char w)
+{
+ if ((u + w) & 0x80)
+ v = 1;
+}
+
+int a0b (unsigned char u, unsigned char w)
+{
+ if ((u - w) & 0x22)
+ v = 1;
+}
+
+int a1b (unsigned char u, unsigned char w)
+{
+ if ((u + w) & 0x22)
+ v = 1;
+}
+
+int a0ws (unsigned short u, unsigned short w)
+{
+ if ((u - w) & 0x8000)
+ v = 1;
+}
+
+int a1ws (unsigned short u, unsigned short w)
+{
+ if ((u + w) & 0x8000)
+ v = 1;
+}
+
+int a0wbs (unsigned short u, unsigned short w)
+{
+ if ((u - w) & 0x80)
+ v = 1;
+}
+
+int a1wbs (unsigned short u, unsigned short w)
+{
+ if ((u + w) & 0x80)
+ v = 1;
+}
+
+int a0w (unsigned short u, unsigned short w)
+{
+ if ((u - w) & 0x8421)
+ v = 1;
+}
+
+int a1w (unsigned short u, unsigned short w)
+{
+ if ((u + w) & 0x8421)
+ v = 1;
+}