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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Inserting into vector with  |[8/9/10 Regression]
                   |optimization enabled on x86 |Inserting into vector with
                   |generates incorrect result  |optimization enabled on x86
                   |                            |generates incorrect result
   Target Milestone|---                         |8.5

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The above testcase FAILs with all of 7/8/9/10, works with 6.
-fno-tree-sra fixes it.
Unless BIT_FIELD_REF with a non-SSA_NAME first operand is invalid on the lhs of
assignment, I believe this is a SRA bug.
Before SRA we have:
  z.j = { 0, 0, 0, 0 };
  BIT_FIELD_REF <z.i, 64, 0> = 1729;
  _11 = z.j;
  z ={v} {CLOBBER};
  z.j = _11;
  BIT_FIELD_REF <z.i, 64, 64> = 2;
  _6 = z.j;
  z ={v} {CLOBBER};
  z.j = _6;
  _3 = BIT_FIELD_REF <z.i, 64, 0>;
  if (_3 != 1729)
but SRA transforms it into:
  z$j = { 0, 0, 0, 0 };
  BIT_FIELD_REF <z.i, 64, 0> = 1729;
  _19 = MEM[(union U *)&z];
  z$j = _19;
  _1 = z$j;
  _11 = _1;
  z$j ={v} {CLOBBER};
  z$j = _11;
  BIT_FIELD_REF <z.i, 64, 64> = 2;
  _15 = MEM[(union U *)&z];
  z$j = _15;
  _12 = z$j;
  _6 = _12;
  z$j ={v} {CLOBBER};
  z$j_22 = _6;
  MEM[(union U *)&z] = z$j_22;
  _3 = BIT_FIELD_REF <z.i, 64, 0>;
  if (_3 != 1729)
which is definitely not equivalent.

Reply via email to