https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98337
Bug ID: 98337 Summary: Failure to optimize out on-stack array construction when unneeded Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- int f(int x) { int a[] = {0, 1}; return a[x]; } On AMD64, with -O3, this is generated : f(int): mov rax, QWORD PTR .LC0[rip] movsx rdi, edi mov QWORD PTR [rsp-8], rax mov eax, DWORD PTR [rsp-8+rdi*4] ret .LC0: .long 0 .long 1 LLVM generates this : f(int): # @f(int) movsxd rax, edi mov eax, dword ptr [4*rax + .L__const.f(int).a] ret .L__const.f(int).a: .long 0 # 0x0 .long 1 # 0x1 It seems to me like not copying the entire array on the stack makes for faster code.