The following fixes yet another bogus range info case. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard. 2016-02-02 Richard Biener <rguent...@suse.de> PR tree-optimization/69606 * tree-ssa-math-opts.c (bswap_replace): Clear flow sensitive info on the result before moving a stmt. * gcc.dg/torture/pr69606.c: New testcase. Index: gcc/tree-ssa-math-opts.c =================================================================== *** gcc/tree-ssa-math-opts.c (revision 233067) --- gcc/tree-ssa-math-opts.c (working copy) *************** bswap_replace (gimple *cur_stmt, gimple *** 2622,2627 **** --- 2622,2629 ---- /* Move cur_stmt just before one of the load of the original to ensure it has the same VUSE. See PR61517 for what could go wrong. */ + if (gimple_bb (cur_stmt) != gimple_bb (src_stmt)) + reset_flow_sensitive_info (gimple_assign_lhs (cur_stmt)); gsi_move_before (&gsi, &gsi_ins); gsi = gsi_for_stmt (cur_stmt); Index: gcc/testsuite/gcc.dg/torture/pr69606.c =================================================================== *** gcc/testsuite/gcc.dg/torture/pr69606.c (revision 0) --- gcc/testsuite/gcc.dg/torture/pr69606.c (working copy) *************** *** 0 **** --- 1,20 ---- + /* { dg-do run } */ + + char a; + unsigned short b; + int c, d; + unsigned char e; + + int + main () + { + int f = 1, g = ~a; + if (b > f) + { + e = b; + d = b | e; + g = 0; + } + c = 1 % g; + return 0; + }