https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121694
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
TLS64_COMBINE has the same issue:
[hjl@gnu-zen4-1 pr121668]$ cat y.c
extern void func1 (long *);
extern int func2 (void);
extern void func3 (void);
static __thread long foo;
static __thread long bar;
long
func (void)
{
func1 (&foo);
func1 (&bar);
if (func2 ())
func3 ();
return foo + bar;
}
[hjl@gnu-zen4-1 pr121668]$
/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -Og -fPIC -S
y.c -mtls-dialect=gnu2
[hjl@gnu-zen4-1 pr121668]$ cat y.s
.file "y.c"
.text
.globl func
.type func, @function
func:
.LFB0:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
leaq _TLS_MODULE_BASE_@TLSDESC(%rip), %rax
call *_TLS_MODULE_BASE_@TLSCALL(%rax)
movq %rax, %rbx
leaq foo@dtpoff(%rax), %rdi
addq %fs:0, %rdi
call func1@PLT
movq %fs:0, %rax
leaq bar@dtpoff(%rbx,%rax), %rdi
call func1@PLT
call func2@PLT
testl %eax, %eax
jne .L4
.L2:
leaq _TLS_MODULE_BASE_@TLSDESC(%rip), %rax
call *_TLS_MODULE_BASE_@TLSCALL(%rax)
movq %fs:bar@dtpoff(%rax), %rdx
addq %fs:foo@dtpoff(%rax), %rdx
movq %rdx, %rax
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.L4:
.cfi_restore_state
call func3@PLT
jmp .L2
.cfi_endproc
.LFE0:
.size func, .-func
.section .tbss,"awT",@nobits
.align 8
.type bar, @object
.size bar, 8
bar:
.zero 8
.align 8
.type foo, @object
.size foo, 8
foo:
.zero 8
.ident "GCC: (GNU) 16.0.0 20250827 (experimental)"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-zen4-1 pr121668]$