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

    <tr>
        <th>Summary</th>
        <td>
            [TSan] Invalid IR generated for atomicrmw with pointers
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            compiler-rt:tsan
      </td>
    </tr>

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

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

<pre>
    https://llvm.godbolt.org/z/o3nej9cKj
```llvm
; RUN: opt -S -passes=tsan
define void @atomic8_xchg_monotonic_ptr(ptr %a, ptr %b) {
entry:
  atomicrmw xchg ptr %a, ptr %b monotonic
  ret void
}
```

This produces:
```llvm
define void @atomic8_xchg_monotonic_ptr(ptr %a, ptr %b) {
entry:
  %0 = call ptr @llvm.returnaddress(i32 0)
  call void @__tsan_func_entry(ptr %0)
  %1 = zext ptr %b to i64
  %2 = call i64 @__tsan_atomic64_exchange(ptr %a, i64 %1, i32 0)
  call void @__tsan_func_exit()
  ret void
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0U8FurDgQ_JrmYs0I2piBA4fJjkaKVtpDkj0jYxtwFmxkm2SSr19hJskoivTe5UkIbNTVVdWt4t7r3ihVA7sDdkr4EgbraqP_0yJprXyrhxBmD_QIeAY8j-PLtO-tbO0Y9tb1gOd3wLOlRj1X4u9nSE-QHqFIt2ctv_6id-Th33-AHomdA9k9kt3MvVce6Cl4brYqqTptFHmxWhLIUx7spEXZXMTQN5M1NlijRTMHB1jOwRFAxgH_ItdzC1gRONxtzZQJ7m1VHm-EbN3c9ErWfuQnPPkk-QA5FaKcq4vD6ZvD6zW-nwbtyeysXITyn8Q_DOOP2gRkKQF6IoKP4wbJI_feqbA4w6V0ynvAUlMkKWD1gYyAD1FNs66l6RYjmo3iU8stBpBlke1dXcLXHIMlushvivBLki7yG4LNfJE36iIGbnr1zXOsRpbF828LvugAWN6U_mqPiayprGjFE1VnhyzNMWdlkQy1EGVWUomMMVnkNBNcsA5ZmR2qgrX8kOgaU8xTmuUZZQUW-5JWBRecsbZQXYcd5KmauB73cQnW9Yn2flF1yRCLZOStGn3MH6Kw06xH5XYuAD3GXCCuuXT1Ct61S-_XbWof_Fe7oMMYE_z0yA2wE7k3L3zUktw_kF4Z5XhQknTW3UTgVYeBzFaboJxPFjd-C3qvw7C0e2Gna-qvn93s7LMSAfAcXXjAczTyfwAAAP__TGBIKw">