<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60855>60855</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Using gnu_asm_goto_with_outputs_full without optimizations returns uninitialized memory
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          josephcsible
      </td>
    </tr>
</table>

<pre>
    Consider this C code:
```c
#if !__has_extension(gnu_asm_goto_with_outputs_full)
#error Need the gnu_asm_goto_with_outputs_full extension
#endif
int main(void) {
 int x = 123;
    asm goto("mov %1, %0\n\tjmp %l[label]" : "=r" (x) : "r" (45) : : label);
    x = 6;
    label:
    return x;
}
```
It's supposed to return 45. But when compiled on Clang trunk (4be17641b05df1e63fa8e069af92676f1246eb83) without optimizations, it produces this assembly:
```asm
main: # @main
        pushq   %rbp
        movq    %rsp, %rbp
        movl $0, -4(%rbp)
        movl    $123, -8(%rbp)
        movl    $45, %eax
        movl    %eax, %eax
        jmp     .LBB0_3
        movl %eax, -16(%rbp)                 # 4-byte Spill
        movl    %eax, -12(%rbp)                 # 4-byte Spill
        jmp .LBB0_1
.LBB0_1:
        movl    -12(%rbp), %eax                 # 4-byte Reload
        movl    %eax, -8(%rbp)
        movl    $6, -8(%rbp)
.LBB0_2:
        movl    -8(%rbp), %eax
        popq %rbp
        retq
.LBB0_3:                                # Block address taken
        movl    -16(%rbp), %eax                 # 4-byte Reload
        movl    %eax, -8(%rbp)
        jmp .LBB0_2
```
Which ends up returning uninitialized memory (the `-16(%rbp)` from the third-to-last line) instead. If I instead compile with any optimization level (other than `-O0`), then it produces correct assembly.

https://godbolt.org/z/fnPcYY44G
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVs1u4zYQfhr6MrAhURIlH3SIbbgIULRFi6LYk0GJY4sJRSoklb-nL0jZTuI6mwV6WCKIMH-cjzNfZsKdkweNWJNiRYrNjI--M7a-Mw6HrnWyUThrjHip10Y7KdCC76SDNbRGIMluSLIhyQ1hyfTTHmWayT0Qmu52HXc7fPaonTSa0Oqgxx13_e5gvNk9Sd_tzOiH0bvdflSK0OX5BrTWWPgNUYDvEL4fCG85zvFayP0kSe2h5zLkfzRSELoEUq4mGwTjM5BsAynNSHZSAwB3PYR0hFaE0t48AqFFSug6fBNSrDUp1v6uH4KsSLFSvEFFig2hFEh2A4RSkm1sFGn1HPNO6pMuL87K7AameLr8gGLCxj7oJsdT-YPGoh-thuezGyk3F82ZxFtPaOnAjcNgXKitOcXmxQJWo4enDjW0ph-kQgFGw1pxfQBvR30fMTeYlixPm6QQ-xRZtucVJmzJ90vKSrZPac6wqbLwstAoM3owg5e9fOVeGu1CBaWHwRoxtugmSnHnsG_Uy39JxV0_aWILY_0yIHkSxXMBwhlG1z0AhHbYZvho681jMEWbG45NvOalgNA8CQ7zPHY-ep2I-cExXpcH2gTv6oe8Q8djbuTPnzlF2ydegW7hLH5drZJddhX-KX6esveY4PKEQubz5sUj_DVIpb7CM0_p_7gvIJ9Qp5PhJLzn8fvEF-neKvK9xH-iMlx8-ZIfaxb7zHeCTj-HXl1HfsFXMzxcpaFF__A-URZo_8UJNVgp094DF8Kic-D5PerPSst-RmnfKECvDqd_Otl2gFo4GIfjXJL6AKOWWnrJlXxFAT32xr6EURQWA2HJ5WtYAntr-rg3fCetmHszV9x5UFJjYK7UziMXC7jdw-1JOg29OLWA65cPYwsUPmL466qM7-Ii5Dom_z3in4row-x8P9taYy22_jzeFsd3x9-d94MLHKJbQrcHIxqj_MLYA6HbV0K3e_1H--1bnv8yE3UmltmSz7BOWcnKkpbLctbVNGFcVJznFSuahpVlRlssRVPRgrWiFDNZ04RmCU2XCU2ztFygSEpeZS3LeEqLZUXyBHsu1UKpxz7knknnRqxZUhXFLC4aF_87oFTjE0Rj2GvFZmbrEDNvxoMjeaKk8-7tFi-9wvpvF9r3xe6-uiSO3XdXez8braovqid9NzaL1vSEbgOK42c-WHOHrSd0G7E7Qrfxbf8GAAD__yw4f-4">