On Mon, May 23, 2011 at 6:21 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Mon, May 23, 2011 at 06:06:55AM -0700, H.J. Lu wrote: >> On Thu, May 12, 2011 at 7:36 AM, Jakub Jelinek <ja...@redhat.com> wrote: >> > The read from a 1-bit signed bitfield initialized by a comparison >> > is optimized into the comparison, which has that 1-bit signed bitfield >> > comparison. Unfortunately that is still expanded as setting the result >> > to 0 resp. 1 instead of this case 0 resp. -1 QImode pseudo, which is then >> > sign extended into SImode for the comparison. >> > >> > Fixed by special casing expansion in that case. I think it is rare enough >> > we can just ignore the fold_single_bit_test optimization in that case, >> > rather than having two versions thereof. >> > >> > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.6? >> > >> > 2011-05-12 Jakub Jelinek <ja...@redhat.com> >> > >> > PR middle-end/48973 >> > * expr.c (expand_expr_real_2) <case LT_EXPR>: If do_store_flag >> > failed and the comparison has a single bit signed type, use >> > constm1_rtx instead of const1_rtx for true value. >> > (do_store_flag): If ops->type is single bit signed type, disable >> > signel bit test optimization and pass -1 instead of 1 as last >> > parameter to emit_store_flag_force. >> > >> > * gcc.c-torture/execute/pr48973-1.c: New test. >> > * gcc.c-torture/execute/pr48973-2.c: New test. >> > >> >> This caused: >> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49123 > > Can't reproduce, all tests succeed just fine, both on the trunk and in 4.6, > both x86_64-linux {-m32,-m64} and 32-bit HWI i686-linux, including -flto. >
Does your linker support LTO? -- H.J.