http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55273
--- Comment #8 from Jan Hubicka <hubicka at gcc dot gnu.org> 2013-01-16
13:17:30 UTC ---
OK, the problem is that the "induction" variable here is not normal induction
variable but handed by xor.
PPC target seems to be only that translates (flags & 0x80000000)
into
(insn 47 45 54 11 (set (reg/v:SI 125 [ flags ])
(plus:SI (reg/v:SI 125 [ flags ])
(const_int -2147483648 [0xffffffff80000000]))) t.c:15 64
{*addsi3_internal1}
(nil))
so turning it into normal IV var.
This makes loop-iv to get what tree level IV doesn't. We could make tree level
IV to also handle this XOR as plus, but that is more an enhancement.
I am testing the following patch.
Index: loop-iv.c
===================================================================
--- loop-iv.c (revision 195144)
+++ loop-iv.c (working copy)
@@ -2819,7 +2819,8 @@ iv_number_of_iterations (struct loop *lo
else
{
max = determine_max_iter (loop, desc, old_niter);
- gcc_assert (max);
+ if (!max)
+ goto zero_iter_simplify;
if (!desc->infinite
&& !desc->assumptions)
record_niter_bound (loop, double_int::from_uhwi (max),