<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/136816>136816</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
why clang use Ltmp lable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
LukeSTM
</td>
</tr>
</table>
<pre>
example:
```
#include <stdio.h>
typedef struct {
volatile int counter;
} Counter;
void foo(Counter *v, int i) {
int result, val, tmp;
__asm__ __volatile__(
".arch_extension mp\n"
"9998: " "pldw\t%a0" "\n"
" .pushsection \".alt.smp.init\", \"a\"\n"
" .long 9998b - .\n"
" " "pld\t%a0" "\n"
" .popsection\n"
"1: ldrex %0, [%4]\n"
" add %1, %0, %5\n"
" strex %2, %1, [%4]\n"
" teq %2, #0\n"
" bne 1b"
: "=&r" (result), "=&r" (val), "=&r" (tmp), "+Qo" (v->counter)
: "r" (&v->counter), "Ir" (i)
: "cc"
);
printf("Updated counter: %d\n", v->counter);
}
int main() {
Counter c = {0};
printf("Initial counter: %d\n", c.counter);
foo(&c, 5);
return 0;
}```
https://godbolt.org/z/Px35ejvbn
Clang will split the `foo` function in the example into two parts, using `Ltmp0` to represent the embedded assembly logic in the source code. Why is this done?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVU1v4zYQ_TXjyyACTVqyfNDBsdfAAlugRVv0aFDixOKWIlWRcpL--oL62Dhy0hUUMJyPN29G5LP0Xl8sUQHpI6THlexD7briW_83_f7HL6vSqdeCXmTTGgKxBza8GZtetgcutK1MrwhBHHxQ2iU1iC9jZHhtSdET-tD1VUDYPgLbIyJenZFBG0JtA1aut4E6ENEL2yMe3hnY_uq0wifngOeTC4Hvr8APQ74GvrvBjqaOfG9CDLhKE5fQtD_gYtD5LH1zPuP5PFM5n4Hnkzc-wHkiu6o-00sg67Wz2LSQHixwjosnpgHnu90uB7GfsuNfa9QzpIcAPJVsst1jvK8al6Ttfe2pCrEspIeBjAmJb9pEWx1GU2xs_E9Ohgl6CZgYZy-IGAmW-IDJZ4FvtH_OetE8Jq1rJ8qfB9-3u44TM6qjl2GfsrGrR-DpBtLjx1B3E5NKTbt0PQDMQDxNP2s2Hsu5Kp-C1z-vfgcT6J8bCME-7f4us7Q07Nblkp8YZgriCDzrxk-Qz4d6NxZaeIeD_rErHv43F3_8zc05DyC-zNcvXqI7BjME8GwRPMF9nSOGW_hRpyNQVX1-IJZpEf32sradtuFpYMH_bJUMpN5EI6Knapr5cOMXPGdZGfGiOjRS2wHtVjZmZakQxDHaWcz5QeOWw1erg5bmfzhUyZJALDFKGPCsijHpuzY7Cn1nkb3RvVVZtq9DaH2UYH4Cfro4VToTEtddgJ_-BX769UWk9P1a2jH8YKS94LM2Bn1rdMBQE0LGIoWM4VNvR23RdvBMEh-102F4dtjKLvjIsvfaXmLmt9C0kQ4Ghx21HXmyIyw1JSlFCqX31JTmFY276GrG9q7vKsLKKUrwr_oVtcdQa4_KWQJxArZfqUKondjJFRXr7SYVeZ7zfFUXuazyKkt3lJdpqWgrtlRuss1W8vW6zDfZShec8ZRtuGDZWmzyhHHKcrUtd8Seyo3gsGHUSG0SY65NnNdKe99TsRZZvs5WRpZk_PDrx3kVhzZo3XHVFTHhoewvHjbMaB_8G0TQwVDxXL_ikIK9J4zzQSNLQ6u-M8Xie-lQ92VSuQb4KcJMy0Pbue9UBeCngZYHfpqYXQv-XwAAAP__R0j-Gw">