[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