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

Reply via email to