------- Comment #1 from pinskia at gcc dot gnu dot org 2008-08-24 22:40 ------- Confirmed. One issue is that VRP does not look again at some % statements when it knows it can be a constant so we produce: D.1962_10 = 0; D.1963_11 = (int) D.1962_10;
Here is a more reduced testcase: func_18 ( int t ) { unsigned l_889; int l_895 = 1; for (0; 1; ++l_889) { int t1 = 0; if (func_81 (1)) { int rhs = l_895; if (rhs == 0) rhs = 1; if (1 & (t % rhs)) t1 = 1; } func_98 (t1); l_895 = 0; } } -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|c |tree-optimization Ever Confirmed|0 |1 GCC build triplet|i686-pc-linux-gnu | GCC host triplet|i686-pc-linux-gnu | GCC target triplet|i686-pc-linux-gnu |i686-*-*, x86_64-*-* Keywords| |ice-on-valid-code Last reconfirmed|0000-00-00 00:00:00 |2008-08-24 22:40:19 date| | Summary|ice at tree-ssa- |[4.4 Regression] ice at |ifcombine.c:222 |tree-ssa-ifcombine.c:222 for | |-Os Target Milestone|--- |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37207