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]$