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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] Miscompilation on rv64
        </td>
    </tr>

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

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

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

<pre>
    The following program miscompiles when using clang++ for rv64:
```
$ cat foo.cpp 
#include <cmath>

int main() {
  long double y = NAN;
  _Float16 a = static_cast<_Float16>(y);
  return (a != a);
}
```
The cast of `NAN` from `long double` to `_Float16` generates `0`, instead of `NAN`.

It only happens with clang++ in rv64. It works just fine in intel 64 and rv32. Compiling with g++ for rv64 also works.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsU8GOozoQ_Jrm0hpkGmLCgcMkeZHm8Obw3mqvI8cY8IyxkW0S5e9XJpnZzGolBOouuii6yiIEPVilWtjsYHPIxBJH59tJf4xCGy8mYUaXnVx3bX-MCntnjLtoO-Ds3eDFhJMO0k2zNirgZVQWl5BgaYQdgHZAO-ydR3_mFZTPwA7AnoGz-3UrqUIpIvbO5XKe8bNbaivN0imEci8nEUco_7lj613biJPQFmgL1CDUu1sf0Tg7YOeWk1F4RSgP-Pr8CuUX_nY0TsSCo1jBEEXU8k2KEKHcf4Lpa7S9AjUPk17FxVsE2goEKtK0eHwD6sNf_zEtL_Gj6xE4S3I4w967KZUPelM7utT80sEZDsoqL6IKCVhZaY_ahqhE940yf1zQS0RnzRVHMc_KBrzoOH5zRtvVmBxfIl6c_wj4voSIvbYqYdpGZZBXKGyH_lxSjvvV6-TwSvanxShMcDequ5Ksa8uuKRuRqbaoacOromY8G9uaUVVWRc9VU3WnU1HXbEslY52URc3YNtMtMapYw3jBNxu2yUteUa24bETVyJI4VExNQpvcmPOUOz9kOoRFtQWrOaszI07KhDXYRFZdcEWBKOXct2no6bQMASpmdIjhN03U0awn4r-X__c_YXPAfz9TLqJ2Ft1tb9niTTvGOIcUbToCHQcdx-WUSzcBHRPh_fE0e_euZAQ6rjIC0PGu89zSrwAAAP__IH0Mkg">