On Tue, 8 Jul 2014, Jakub Jelinek wrote: > On Thu, Jul 03, 2014 at 08:35:14AM +0200, Jakub Jelinek wrote: > > Bootstrapped/regtested on x86_64-linux, i686-linux and s390{,x}-linux. Ok > > for trunk/4.9? > > I'd like to see this in 4.9.1, it is a wrong-code regression from 4.8.x, > so I'm pinging this now:
Ok. Thanks, Richard. > > 2014-07-03 Jakub Jelinek <ja...@redhat.com> > > > > PR rtl-optimization/61673 > > * combine.c (simplify_comparison): Test just mode's sign bit > > in tmode rather than the sign bit and any bits above it. > > > > * gcc.c-torture/execute/pr61673.c: New test. > > > > --- gcc/combine.c.jj 2014-03-28 20:49:52.892077022 +0100 > > +++ gcc/combine.c 2014-07-02 16:56:02.260456040 +0200 > > @@ -11987,7 +11987,7 @@ simplify_comparison (enum rtx_code code, > > = (unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (mode) - 1); > > op0 = simplify_gen_binary (AND, tmode, > > gen_lowpart (tmode, op0), > > - gen_int_mode (sign, mode)); > > + gen_int_mode (sign, tmode)); > > code = (code == LT) ? NE : EQ; > > break; > > } > > --- gcc/testsuite/gcc.c-torture/execute/pr61673.c.jj 2014-07-02 > > 17:17:01.398908630 +0200 > > +++ gcc/testsuite/gcc.c-torture/execute/pr61673.c 2014-07-02 > > 17:12:36.000000000 +0200 > > @@ -0,0 +1,50 @@ > > +/* PR rtl-optimization/61673 */ > > + > > +char e; > > + > > +__attribute__((noinline, noclone)) void > > +bar (char x) > > +{ > > + if (x != 0x54 && x != (char) 0x87) > > + __builtin_abort (); > > +} > > + > > +__attribute__((noinline, noclone)) void > > +foo (const char *x) > > +{ > > + char d = x[0]; > > + int c = d; > > + if ((c >= 0 && c <= 0x7f) == 0) > > + e = d; > > + bar (d); > > +} > > + > > +__attribute__((noinline, noclone)) void > > +baz (const char *x) > > +{ > > + char d = x[0]; > > + int c = d; > > + if ((c >= 0 && c <= 0x7f) == 0) > > + e = d; > > +} > > + > > +int > > +main () > > +{ > > + const char c[] = { 0x54, 0x87 }; > > + e = 0x21; > > + foo (c); > > + if (e != 0x21) > > + __builtin_abort (); > > + foo (c + 1); > > + if (e != (char) 0x87) > > + __builtin_abort (); > > + e = 0x21; > > + baz (c); > > + if (e != 0x21) > > + __builtin_abort (); > > + baz (c + 1); > > + if (e != (char) 0x87) > > + __builtin_abort (); > > + return 0; > > +} > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer