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

    <tr>
        <th>Summary</th>
        <td>
            Memory order not respected for `atomic<long double>::load`
        </td>
    </tr>

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

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

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

<pre>
    This is coming up when we try to implement `fetch_add` and `fetch_sub` for `std::atomic<long double>`.

For the following code

```cpp
using T = long double;

int main()
{
 std::atomic<T> a = 0.0;
    int nonAtomic = 0;

    std::thread t([&]{
        while(a.load(std::memory_order_acquire) != T(1.0)){
 std::this_thread::yield();
        }

 assert(nonAtomic == 42);
    });

    nonAtomic = 42;
 a.store(T(1.0), std::memory_order_release);
 t.join();
}
```
https://godbolt.org/z/z5P11zznG

When run with TSAN, we can see the data race of read/write `nonAtomic`, meaning the acquire/release is not working.
Note that when `T` is `double`, this is working. 

in `std::atomic`, we simply call the builtin `__c11_atomic_load`

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VN1yszYQfZrlZieMEAbDBRdO_NGrftOZeqaXHoHWRqlAriRKnafvCIh_0jQT_y17dveszpFwTp0HogqyV8j2kRh9Z2zVjeofRSWLGiOv1aFTDpXD1vRqOON4wamjASdCb6_oDar-oqmnwSPk7ES-7Y5CSsgZikHeY25sQuxkbIg5LyHdQboT3vSqhfRNm-GM0oyNJkh_QM5iYHtgu-W9NhZ9R3gyWpspDNIaSY8ZkLPlv71clsjoQt4BId3jU_XXR5waPPZCDcAL4OX6ZLum4H_nPED6A8VclMXsVgwRMZQazLCbU5eML81C1q2k7ywJiT50zl6B55Dt753Xv6lTmoAXItZGSODFDd5Tb-z1aKwkexTtX6OyBLxE4ElofQBeJDELnHj5DSHfKXdcRlgCV0VarltIv0wB2_0TDeEc2TD4E93QdsO_4gP2IXR_8LyqDb-jROy8CWyKRxZv-D13S5qEo6e-Pn43tzO9tb6x-NTK8rPz_uJCYV4Dr89GNkb72Ngz8PojvLLfkuTjY_jlkcEfwQV2HHBSvsPD77ufYcKJsBUDOqJZrlJ4gVa0hOaE86p5PVnlKXjgxj8Mwt-wJzEExQbg7TzrlV2w4GA8Tsb-qYbzao6fxodGwi-mhJwdgsmUC19XuS_F_WrjTzw-e-A7Ty7AidAFi1-xFVrPwzWj0n7BHI9tkhwXwHFW6OdSI1mlskxLEVGVbBnLWLLJi6irtjkvOEkmiiJLyyLNMilZcZKb5tTyvEwiVXHG0yThLNmmCSvi9JRnWZ4S5XKTFLmEDaNeKB1r_XcfzilSzo1UbXlRppEWDWk332mct6a_KE32JaiVh0vOVgH10oxnBxumlfPuXscrr6n6dVYXzuqal27JXaj1JD-vr_-7teb1rWuIRqurL9JSvhubuDU98Do0XT9eLta8U-uB1zMTB7yeyfwbAAD__0pwppQ">