regehr@john-home ~/z/reduce/r107 $ gcc -O0 small.c ; ./a.out regehr@john-home ~/z/reduce/r107 $ gcc -O1 small.c ; ./a.out x regehr@john-home ~/z/reduce/r107 $ cat small.c int printf(const char *, ...); int x3 (int x4) { return x4 < 0 ? 1 : x4; } int x0 = 1, x1, x2; int main (void) { if (x3(x0 > x2 == (x1 = 0))) { printf("x\n"); } return 0; } regehr@john-home ~/z/reduce/r107 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/home/regehr/z/compiler-install/gcc-r202341-install/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: /home/regehr/z/compiler-source/gcc/configure --prefix=/home/regehr/z/compiler-install/gcc-r202341-install --enable-languages=c,c++ --disable-multilib Thread model: posix gcc version 4.9.0 20130906 (experimental) (GCC)
Something strange seems to happen in reassoc.
Started with r193028 . I'll have a look.
Created attachment 30771 [details] gcc49-pr58364.patch Untested fix.
Author: jakub Date: Mon Sep 9 17:09:59 2013 New Revision: 202409 URL: http://gcc.gnu.org/viewcvs?rev=202409&root=gcc&view=rev Log: PR tree-optimization/58364 * tree-ssa-reassoc.c (init_range_entry): For BIT_NOT_EXPR on BOOLEAN_TYPE, only invert in_p and continue with arg0 if the current range can't be an unconditional true or false. * gcc.c-torture/execute/pr58364.c: New test. Added: trunk/gcc/testsuite/gcc.c-torture/execute/pr58364.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-reassoc.c
Author: jakub Date: Mon Sep 9 17:11:05 2013 New Revision: 202410 URL: http://gcc.gnu.org/viewcvs?rev=202410&root=gcc&view=rev Log: PR tree-optimization/58364 * tree-ssa-reassoc.c (init_range_entry): For BIT_NOT_EXPR on BOOLEAN_TYPE, only invert in_p and continue with arg0 if the current range can't be an unconditional true or false. * gcc.c-torture/execute/pr58364.c: New test. Added: branches/gcc-4_8-branch/gcc/testsuite/gcc.c-torture/execute/pr58364.c Modified: branches/gcc-4_8-branch/gcc/ChangeLog branches/gcc-4_8-branch/gcc/testsuite/ChangeLog branches/gcc-4_8-branch/gcc/tree-ssa-reassoc.c
Fixed.
r195642 is an equivalent fix in the folder (make_range_step).