[Bug middle-end/35136] [4.3 Regression] ICE caused by address calculation with loop variable when optimization is on
ebotcazou at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Feb 12 08:46:00 GMT 2008
------- Comment #8 from ebotcazou at gcc dot gnu dot org 2008-02-12 08:45 -------
The failure mode is as follows: IVOPTS decices to turn the iteration on the
value of A (variable in the code) to an iteration on its address. But there
is a cast in the middle
a.0_4 = (system__aux_dec__TsaB) a_3(D);
D.249_5 = i_131 + a.0_4;
so create_iv invokes force_gimple_operand on ADDR_EXPR<NOP_EXPR<SSA_NAME>>,
which is passed to gnat_gimplify_expr. The latter creates the temporary
A.36 and it is never marked for renaming.
I think that the problem is in create_iv: it should make sure that the SSA
form is preserved, for example by invoking force_gimple_operand_bsi instead
of force_gimple_operand like some functions in tree-ssa-loop-ivopts.c.
But maybe the problem is the discrepancy between force_gimple_operand and
force_gimple_operand_bsi: why does the latter preserve the SSA form and not
the former?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35136
More information about the Gcc-bugs
mailing list