<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74432>74432</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: unnecessary TLS address calculations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
llvm:optimizations
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dvyukov
</td>
</tr>
</table>
<pre>
2 similar functions:
```
void foo() {
long tmp;
asm volatile(
"movq %[x], %[tmp];"
"movq %[tmp], %[y];"
: [tmp] "=&r"(tmp)
: [x]"m"(x), [y]"m"(y));
asm volatile(
"movq %[x], %[tmp];"
"movq %[tmp], %[y];"
: [tmp] "=&r"(tmp)
: [x]"m"(x), [y]"m"(y));
}
void bar() {
long tmp;
asm goto(
"movq %[x], %[tmp];"
"movq %[tmp], %[y];"
: [tmp] "=&r"(tmp)
: [x]"m"(x), [y]"m"(y)
:: label);
return;
label: __attribute__((cold));
asm volatile(
"movq %[x], %[tmp];"
"movq %[tmp], %[y];"
: [tmp] "=&r"(tmp)
: [x]"m"(x), [y]"m"(y));
}
```
For the first clang generates expected:
```
mov %fs:0xfffffffffffffff0,%rax
mov %rax,%fs:0xfffffffffffffff8
mov %fs:0xfffffffffffffff0,%rax
mov %rax,%fs:0xfffffffffffffff8
```
But for the second clang adds unnecessary mov+lea+lea on the "fast path" of the function:
```
mov %fs:0x0,%rcx
lea -0x10(%rcx),%rax
lea -0x8(%rcx),%rcx
mov %fs:0xfffffffffffffff0,%rdx
mov %rdx,%fs:0xfffffffffffffff8
ret
mov (%rax),%rdx
mov %rdx,(%rcx)
ret
```
https://godbolt.org/z/PEhK1xhde
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVkGPqzYQ_jXDxdoVDBDgwCHZlEtbqVJ76C0y2ID7DE5tE5H36ysbNptEeW1aaaW2KCIwM98M8_ljMDVGdCPnJaQ7SPcBnWyvdMlO5-mLOgW1YucSiRGDkFSTdhobK9RoIN5CuIdwC5tw_fnbkxKMtEoB5oAFgWy32AkhRKqxI3Y4QnxlpGYgJyWpFZI70MXhDkAc1Ol3AphCupsh3QO-rXcuUbp3uRD_DLXGXXDnb6HiLbmEuxwQ7wE32l1h7sxYPEQsj4XDEji7MFdsrXRxnL2j-LTm_xtdQ7ZfLz7kUlP9nFwcXZ2y6v-vk3u8SyFpzeW9gjS3kx5vTEtcvCWHA7VWi3qy_HDwDOeNkuyTdfjvJ_ehHG_H2HKulCa256QV2ljSSDp2pOMj19RyQ_h85I3l7FujkAzq5Npt3bAM5_b2CAHfAFNN56toz5u3eedjZP6P0z-d-yEbu8mSdmXE8EaNbKWEMmbINI684cZQfXa1AHeS0-VM1OhBgNhSY8mR2h4QiWoXdtdvypM8vnfWvHfmKhBCXsI5Cr3Kvc8L4IaBj7j8QVgz_x1a2YNVY0-tmub2Hpq_r0vx19mvnvsu38M16609-m81VoBVp1itpH1VugOsvgJWP33Xfx_NPeMBK2NWxAUNeBllYZRtkjzKgr7Ms6zGKK6LNEmxSdqspUm-SWm7SWjbIg9EiSHGEYZpmOMmzV55yPK0bbIkioq8SBgkIR-okK9SngZXOxDGTLzMkiTGwE8r43cfiDVtvvDRvVG_5hv_xr4BosNBvFVHKwbxlS77D0S3W9Glc77UU2cgCaUw1nyUscJKXv4ojOGMXKPdzLjW6y8__OxErLkxpKGymeRSJJi0LO8oFLaf6tdGDYCVf7Dl7-Wo1W-8sYCV784AVr7BPwIAAP__yKV5vw">