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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |x86_64-*-*
          Component|rtl-optimization            |target

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm, looks like a target issue.  We expand from

  c = a[1];
  c$2_10 = MEM[(struct S1[2] *)&a + 18B];
  b.0_4 = b;
  MEM[(struct S1 *)&c + 2B] = c$2_10;
  MEM[(struct S1 *)&c + 4B] = 0;
  *b.0_4 = c;
  if (c$2_10 != 0)
..
  _6 = a[0].f3;
  if (_6 != 1)
...

and get

        movzbl  a+18(%rip), %eax
        movdqa  a+16(%rip), %xmm0
        movq    %xmm0, %rdx
        movq    %rax, %rcx
        salq    $16, %rax
        andq    $-16711681, %rdx
        orq     %rax, %rdx
        xorl    %eax, %eax
        testb   %cl, %cl
        movq    %rdx, 8(%rsp)
        movq    8(%rsp), %xmm0
        pinsrw  $2, %eax, %xmm0
        movq    b(%rip), %rax
        movups  %xmm0, (%rax)   <---
        jne     .L2
.L3:
        jmp     .L3
        .p2align 4,,10
        .p2align 3
.L2:
        cmpl    $1, a+8(%rip)
        jne     .L7


but <--- stores the wrong value here.  -mno-sse2 fixes the testcase.

Reply via email to