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; +} +