PR85770 is fixed by Segher's combiner patch to avoid combining hard
regs.  Presumably it helps because it gives the allocators more freedom.

I'm adding the testcase from the PR to the regression suite.

Jeff
commit 40fc691eac0ea9414f7908826c91afc70ff78617
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Dec 6 00:40:08 2018 +0000

            PR rtl-optimization/85770
            * gcc.target/i386/pr85770.c: New test.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266839 
138bc75d-0d04-0410-961f-82ee72b054a4

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8bed4b455e0..cc5d556eeca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-05  Jeff Law  <l...@redhat.com>
+
+       PR rtl-optimization/85770
+       * gcc.target/i386/pr85770.c: New test.
+
 2018-12-05  Martin Sebor  <mse...@redhat.com>
 
        PR c/87028
diff --git a/gcc/testsuite/gcc.target/i386/pr85770.c 
b/gcc/testsuite/gcc.target/i386/pr85770.c
new file mode 100644
index 00000000000..dbb685fd83f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr85770.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=nano-1000 -fnon-call-exceptions 
-fno-tree-coalesce-vars" } */
+
+unsigned a, b, c, d, e, f, g, h, i;
+unsigned __int128 j;
+
+__int128 foo(char k, unsigned short l, unsigned m, unsigned n, __int128 o,
+             unsigned char p) {
+  long q;
+  p |= -k;
+  __builtin_add_overflow(p, m, &q);
+  m *= ~__builtin_clrsbll(0);
+  j = j >> (o & 127) | j << (o & 7);
+  return k + l + m + n + o + a + b + c + d + j + l + e + f + q + 4294967295 +
+         p + g + h + i;
+}
+

Reply via email to