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

    <tr>
        <th>Summary</th>
        <td>
            [libc++] Experimental simd tests make assumptions about floating point conversions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++,
            test-suite
      </td>
    </tr>

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

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

<pre>
    I encountered this issue while working on https://github.com/llvm/llvm-project/pull/68753. Basically, some simd tests start failing when optimizations are enabled because they make invalid assumptions about floating-point conversions.

Reproducer (from `libcxx/test/std/experimental/simd/simd.class/simd_ctor_conversion.pass.cpp`):

```
#include <bit>
#include <cassert>
#include <cstddef>
#include <type_traits>
#include <utility>
#include <iostream>

struct simd {
  long double __data __attribute__((__vector_size__(std::bit_ceil((sizeof(long double) * 2)))));

  template <class Array>
  simd(Array const& array) noexcept {
    for (size_t __i = 0; __i != 2; ++__i) {
 __data[__i] = array[__i];
    }
  }
};

int main(int, char**) {
  double as_double __attribute__((__vector_size__(std::bit_ceil((sizeof(double) * 2)))));
 as_double[0] = static_cast<double>(0);
  as_double[1] = static_cast<double>(1);

  simd as_long_double = as_double;

 std::cout << "data[0] as double = " << as_double[0] << std::endl;
 std::cout << "data[1] as double = " << as_double[1] << std::endl;

 std::cout << "data[0] as long double = " << as_long_double.__data[0] << std::endl;
  std::cout << "data[1] as long double = " << as_long_double.__data[1] << std::endl;

  std::cout << "0.0l = " << 0.0l << std::endl;
  std::cout << "1.0l = " << 1.0l << std::endl;

  assert(as_long_double.__data[0] == 0.0l);
 assert(as_long_double.__data[1] == 1.0l);

  return 0;
}
```

Godbolt: https://godbolt.org/z/8vaKaMb4s

In order to reproduce this in the test suite, you can run `libcxx/test/std/experimental/simd/simd.class/simd_ctor_conversion.pass.cpp` with `-O3` by adding `// ADDITIONAL_COMPILE_FLAGS: -O3` to the test and it should reproduce. You should do this inside the Docker image environment to make sure it reproduces, see `libcxx/utils/ci/run-buildbot-container`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vktv4zYQ_jX0ZRBBovyQDz74ES-C7naLtpeeBIoa29ylSIEcJXF-fUHKDyWbINlFCwiyOcN5fDMj8hPeq71BXLDJinH-zR55c_Sod4xzNtmMREcH6xa6VtYYHFW2Pi7uAI20nSF0WAMdlAflfYfwcFAa4cG678rswRo4ELWe5UvGt4xv94oOXZVI2zC-1fr-_HPTOvsNJTG-bTutGd9Oi9kkT2AlvJJC6yPja_C2QfCqqYHQkwdPwhHshNIh2MMBDdiWVKOeBClrPAiHgEZUGmuoUIrOI9ABj9CI7wjK3AutahDed017sqhsR7DTVpAy-5vWKkMgrblH58OGhKUbli7795_YOlt3Eh0wXuycbYBNU60q-fjI-DYkyfjWU834Fh9bdKpBQyLACyhOP4nUwvvTopRkXXkNmLTC-0S2LZumjM9DIQcJBGH_9EueKyN1VyOwfF0pYvntaxopvEf3ptZTXePuDS0dWyzJCUX-jR0dKa3o-IZWWU8ORXNVx7cn10nqm8tmq14IoK3ZQ227SiOUZS1IQFkKIqeqjrAsGS8YL8ryHmPdvHrqhaHm-ZLly0pRKVHpfmPQ2x3jxcAv43NgfAk8lHf45KthggCETasF9TUKLYOlc-KKE6BvahHFYWhC-6cg4i4-B2PxUWJLQ4AAOxunJ6ZOUJYKWL6BlOWrfsGzsOZhzfiK8VVZqpjzxUlfGDaJmskm2vdBz6ILlhCQzTbnxeVv-PMcb5j7RijDeKEMha9PHoRjfBmfYfhzf4QvL536D1r0we5cw7LJKj3D9yRIyVIKTyxfn_T5LeNF-sz4mXX2vnX22mDEoRW-DEN1LkHswcX3C4sLdBkOG5avWb4GxvmpjRGF8DBwxTg_73sFb5RfnKKp9RXhO7GyD8fK3o31c-iGn_aPYQe1TC7z_QG4H8X7C9E_XIA3c0iTVL-MdpL9EqbsFX_Zu_6uox8vAV68U-5NPI-SVL_47N6xzgbW2QvrcwoOqXMmHnbXc-jVmy2-P9m6sppYvnxJK3pFYt2e8e0T49viXvwmvlRjP7S_M2BdjQ7Igjvf3Sf2YgIxiLwCfKcIw4l3tB1IYcB15n-92OFB0SFEuPmah2V1BFHXgdPEWz8ghOVmc_f33dffl5_L9dcvf9x9vi23n5ef_grFOJmRvWIQpgZF4A-20_UVbAL_2O4sre0Zu1d1JEawsfI7OlCN2AfmdK-cNQFa8B05k-8cBscXjz4SM8RnBQoUIACXivGt68xN1SldV5ZupDUklEHHpmkyqhd5Pc_nYoSLbJZmszRP03R0WMyn47zA-WycppgWE8nldDobz8W0qGfzaSVHasFTnmc8HWeTbDpOk2kxHqdVUWSyzibjKbJxio1QOgnsMszFKPLTxWyc89lIiwq1PxHekHV_swbCy9eM81DCm9MYRA7sFpGlVt3es3GqlSd_9UyKdGTPA0-TDdwOBmPIWmMd3-ac8APnHHVOL36aR0e8oQkR8r8BAAD___Q7kpA">