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

--- Comment #2 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Created attachment 35820
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35820&action=edit
A less minimal example

FWIW, here's a less minimal example, better showing what the code was doing
(interpreter values were a union plus a type code).

As in the previous example, fre2 is able to do this optimization of the copy of
arr[1] to arr[0] when doing the copy field-wise:
  Replaced arr_6(D)->union_field.int_field with i_1 in all uses of _10 =
arr_6(D)->union_field.int_field;
  Replaced arr_6(D)->type_code with 0 in all uses of _13 = arr_6(D)->type_code;

turning the loop body into:
  <bb 3>:
  arr_6(D)->union_field.int_field = i_1;
  arr_6(D)->type_code = 0;
  MEM[(struct value *)arr_6(D) + 16B].union_field.int_field = i_1;
  MEM[(struct value *)arr_6(D) + 16B].type_code = 0;
  i_15 = i_1 + 1;

allowing the loop to later be optimized away by cddce2.

Reply via email to