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.
--- /dev/null
+/* { 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;
+}