https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103690

--- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> (gdb) p debug_gimple_stmt(stmt)
> _67 = _14 + _66;
> 
> 
> Before pre had:
>   intD.9 * __trans_tmp_1D.2946;
> ....
>   # RANGE [1, 9223372036854775807] NONZERO 9223372036854775804
>   _66 = (long unsigned intD.16) _17;
>   # PT = nonlocal escaped
>   # ALIGN = 4, MISALIGN = 0
>   _67 = __trans_tmp_1_14 + _66;
> 
> But after:
>   # RANGE [1, 9223372036854775807] NONZERO 9223372036854775804
>   _66 = (long unsigned intD.16) _17;
>   # PT = nonlocal escaped
>   # ALIGN = 4, MISALIGN = 0
>   _67 = _14 + _66;
> 
> We already removed the definition of _14 too:
> Removing dead stmt __trans_tmp_1_14 = _24 + 4;
> 
> So it is the order of the removal which is causing issues.

Why is PRE removing the DEF of _14 when there are still uses?

  <bb 5> [local count: 69834]:
  __count.1_62 = (long unsigned int) _11;
  __builtin_memmove (_14, _9, __count.1_62);
  _66 = (long unsigned int) _17;
  _67 = _14 + _66;
...

Reply via email to