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

            Bug ID: 119297
           Summary: Dead local vector variable isn't removed
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
  Target Milestone: ---

[hjl@gnu-tgl-3 gcc]$ cat /tmp/y.c 
typedef char vec_t __attribute__((vector_size(16)));

extern void func1(vec_t);
extern void func2(char);

void
set1(char val)
{
  vec_t x;
  for (int i = 0; i < 16; i++)
    x[i] = val;

  func1(x);
}

void
set2(char val)
{
  char x = val *2;

  func2(x);
}
[hjl@gnu-tgl-3 gcc]$ ./xgcc -B./ -S -O2 -march=x86-64-v3 /tmp/y.c
[hjl@gnu-tgl-3 gcc]$ cat y.s
        .file   "y.c"
        .text
        .p2align 4
        .globl  set1
        .type   set1, @function
set1:
.LFB0:
        .cfi_startproc
        vmovd   %edi, %xmm0
        vpbroadcastb    %xmm0, %xmm0
        vmovdqa %xmm0, -24(%rsp)  <<<<<<<< Dead local vector variable isn't
removed.
        jmp     func1
        .cfi_endproc
.LFE0:
        .size   set1, .-set1
        .p2align 4
        .globl  set2
        .type   set2, @function
set2:
.LFB1:
        .cfi_startproc
        addl    %edi, %edi
        movsbl  %dil, %edi
        jmp     func2
        .cfi_endproc
.LFE1:
        .size   set2, .-set2
        .ident  "GCC: (GNU) 15.0.1 20250314 (experimental)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-tgl-3 gcc]$

Reply via email to