[Bug rtl-optimization/32283] Missed induction variable optimization
amonakov at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 20 16:25:00 GMT 2007
------- Comment #13 from amonakov at gmail dot com 2007-09-20 16:25 -------
This patch sometimes confuses loop2_doloop. On ia64 this prevents use of
countable loop branch machine idiom (br.cloop). On the example used in this
thread loop2_doloop complains:
Loop 1 is simple:
simple exit 5 -> 6
infinite if: (expr_list:REG_DEP_TRUE (subreg:SI (and:DI (plus:DI (minus:DI
(reg:DI 391)
(reg:DI 370 [ ivtmp.16 ]))
(const:DI (plus:DI (symbol_ref:DI ("a") [flags 0x2] <var_decl
0x2aaaaabd7000 a>)
(const_int -2 [0xfffffffffffffffe]))))
(const_int 1 [0x1])) 0)
(nil))
number of iterations: (lshiftrt:DI (plus:DI (minus:DI (reg:DI 392)
(reg:DI 370 [ ivtmp.16 ]))
(const_int -2 [0xfffffffffffffffe]))
(const_int 1 [0x1]))
upper bound: -1
Doloop: Possible infinite iteration case.
Doloop: The loop is not suitable.
The "infinite if" condition is:
((r391 - r370) + ('a' - 2)) & 1 == 1
where r370 is &(a[i]) and r391 is len*sizeof(a[0]), so that r391+'a' is
&a[len]. Of course, such "infinite if" condition is always false, but
loop2_doloop does not see that.
--
amonakov at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |amonakov at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32283
More information about the Gcc-bugs
mailing list