On Thu, Jul 14, 2016 at 10:24:38AM +0100, Dominik Vogt wrote: > On Wed, Jul 13, 2016 at 07:43:13PM +0200, Bernd Schmidt wrote: > > On 07/13/2016 05:29 PM, Dominik Vogt wrote: > > > > >Unfortunately this patch (or whatever got actually committed) has > > >broken the gcc.target/s390/pr679443.c test case, which is a bit > > >fishy (see code snippet below). I assign most registers to global > > >variables and then use some complicated arithmetics with the goal > > >that the pointer stored in the first argument gets saved on the > > >stack and reloaded to a different register. Before this patch the > > >test case just needed three registers to do its work (r2, r3, r4). > > >With the patch it currently causes an error in the reload pass > > > > > > error: unable to find a register to spill > > > > Might be useful to see the dump_reload output. > > Attached. > > > >If a fourth register is available, the ICE goes away, but the > > >pointer remains in r2, rendering the test case useless. > > > > I don't think I quite understand what you're trying to do here, > > Alias detection of the memory pointed to by the first register. > There was some hard to trigger bug where writing a bitfield in a > struct would also overwrite the unselected bits of the > corresponding word. See here: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67443
I've made a patch for the testcase: https://gcc.gnu.org/ml/gcc-patches/2016-07/msg01232.html That fixes the problem for s390/s390x, but I cannot tell wether the patch to global register variable allocation has a problem or not. If you need any more information just give me a shout. Otherwise I'll not track this issue any further. Ciao Dominik ^_^ ^_^ -- Dominik Vogt IBM Germany