[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #7 from rguenth at gcc dot gnu dot org 2008-03-16 15:55 --- Fixed. -- rguenth at gcc dot gnu dot org changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution||FIXED Target Milestone|--- |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #6 from rguenth at gcc dot gnu dot org 2008-03-16 15:45 --- Subject: Bug 35607 Author: rguenth Date: Sun Mar 16 15:45:09 2008 New Revision: 133273 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=133273 Log: 2008-03-16 Richard Guenther <[EMAIL PROTECTED]> PR middle-end/35607 * tree-ssa-loop-niter.c (expand_simple_operations): Do not expand TREE_INVARIANT operations that are not gimple invariant. * gcc.c-torture/compile/pr35607.c: New testcase. * gcc.dg/tree-ssa/loop-19.c: Use -O2 to avoid vectorization. Added: trunk/gcc/testsuite/gcc.c-torture/compile/pr35607.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c trunk/gcc/tree-ssa-loop-niter.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #5 from rguenth at gcc dot gnu dot org 2008-03-16 12:32 --- One solution is to, in expand_simple_operations, expand all TREE_INVARIANT operations so we end up with # ivtmp.16_1 = PHI instead which we can let pass verification without fatal effects. The other solution is to kill TREE_INVARIANT from everything but constants and invariant addresses during gimplification. Anyone with other options? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #4 from rguenth at gcc dot gnu dot org 2008-03-16 12:23 --- The concrete problem with allowing &foo[(int)z_4] in a PHI node argument is that we cannot cope with immediate uses in PHI nodes and thus DCE z_4 and end up with a reference to a deleted SSA_NAME during expansion (yeah, we don't go out-of-SSA for it either). So this is a non-option. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #3 from rguenth at gcc dot gnu dot org 2008-03-16 12:20 --- This invariantness of (unsigned int) D.1189_5 in __fini_array_end.0_2 = (int) &__fini_array_end; __fini_array_start.1_3 = (int) &__fini_array_start; D.1188_4 = __fini_array_end.0_2 - __fini_array_start.1_3; D.1189_5 = D.1188_4 /[ex] 4; i_6 = (unsigned int) D.1189_5; which is then substituted into the array reference __fini_array_start[i_25] and turned into an address induction variable is there since gimplification. Because gimplification preserves the invariantness of what originally was unsigned int i = (unsigned int) (((int) &__fini_array_end - (int) &__fini_array_start) /[ex] 4); that is, gimplification does _not_ re-set TREE_INVARIANT on anything that had it set before. Which is, err, bogus - sort of. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #2 from rguenth at gcc dot gnu dot org 2008-03-16 11:47 --- Hm, no. This address isn't invariant at all. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607
[Bug tree-optimization/35607] [4.4 Regression] IVOPTs produces invalid gimple
--- Comment #1 from rguenth at gcc dot gnu dot org 2008-03-16 11:45 --- force_gimple_operand doesn't gimplify &__fini_array_start[(unsigned int) D.1189_5] because is_gimple_min_invariant returns true for it. And the verification failure is just an artifact of that. I have a patch. -- rguenth at gcc dot gnu dot org changed: What|Removed |Added AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot |dot org |org Status|UNCONFIRMED |ASSIGNED Ever Confirmed|0 |1 Last reconfirmed|-00-00 00:00:00 |2008-03-16 11:45:46 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35607