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

    <tr>
        <th>Summary</th>
        <td>
            NaN-related regressions on hard float MIPS in LLVM 21
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:MIPS,
            regression
      </td>
    </tr>

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

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

<pre>
    In Zig, we're seeing these test failures on all hard float MIPS targets with LLVM 21:

```
test-std
└─ run test std-mips-linux-gnueabihf-mips32r2-Debug-libc 2834/2926 passed, 5 failed, 87 skipped
error: 'fmt.test.float.special' failed: ====== expected this output: =========
f64: -nan␃

======== instead found this: =========
f64: nan␃

======================================
First difference occurs on line 1:
expected:
f64: -nan
     ^ ('\x2d')
found:
f64: nan
     ^ ('\x6e')
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:672:9: 0xcbd977 in expectEqualStrings (test)
        return error.TestExpectedEqual;
        ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:279:5: 0x15b609f in expectFmt__anon_206405 (test)
    return expectEqualStrings(expected, actual);
    ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/fmt.zig:1001:9: 0x15b712f in test.float.special (test)
        try expectFmt("f64: -nan", "f64: {}", .{-math.nan(f64)});
        ^
error: 'fmt.test.float.hexadecimal.special' failed: ====== expected this output: =========
f64: -nan␃

======== instead found this: =========
f64: nan␃

======================================
First difference occurs on line 1:
expected:
f64: -nan
     ^ ('\x2d')
found:
f64: nan
     ^ ('\x6e')
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:672:9: 0xcbd977 in expectEqualStrings (test)
        return error.TestExpectedEqual;
        ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:279:5: 0x15b800f in expectFmt__anon_206508 (test)
    return expectEqualStrings(expected, actual);
    ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/fmt.zig:1012:9: 0x15b9bff in test.float.hexadecimal.special (test)
        try expectFmt("f64: -nan", "f64: {x}", .{-math.nan(f64)});
        ^
error: 'math.isnan.decltest.isSignalNan' failed: /home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:606:14: 0xcc1713 in expect (test)
    if (!ok) return error.TestUnexpectedResult;
             ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/math/isnan.zig:43:9: 0x19f119f in decltest.isSignalNan (test)
        try expect(!isSignalNan(math.nan(T)));
        ^
error: 'math.copysign.decltest.copysign' failed: /home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:606:14: 0xcc1713 in expect (test)
    if (!ok) return error.TestUnexpectedResult;
             ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/math/copysign.zig:23:9: 0x1a0985f in decltest.copysign (test)
        try expect(copysign(@as(T, 6.0), -math.nan(T)) == -6.0);
        ^
error: 'math.signbit.decltest.signbit' failed: /home/alexrp/Source/ziglang/zig-llvm21/lib/std/testing.zig:606:14: 0xcc1713 in expect (test)
    if (!ok) return error.TestUnexpectedResult;
             ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/math/signbit.zig:49:5: 0x1a34153 in testFloats__anon_341654 (test)
    try expect(signbit(-math.nan(Type)));
    ^
/home/alexrp/Source/ziglang/zig-llvm21/lib/std/math/signbit.zig:27:5: 0x1a364df in decltest.signbit (test)
    try testFloats(f32);
    ^
```

I'll attempt to reduce these failures soon; just filing the issue in advance.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWE9vpLgT_TTuiwUyBbTh0IfOH6RIM6PRL_Pbw15GBgraM27D2iaTzKdfGejQPd3ZzSEj7SHIUohTRdWr91x2LKyVrUbckPSKpDcrMbhdZzZC4aPpV2VXP23uNP1TtgSu6Q8kwA1Siyh1S90OLVKH1tFGSDUYtLTTVChFd8LUtFGdcPTj3ed76oRp0Vn6Q7od_fDhj48UIhJvCRvHms2Dbf3XAutqP30LJE_8mF4yRs2gp3jW1cFe9jZQUg-PQasHFKXcNeNkDAaCGyyHNlCyrChkcUKggBzWtBfWYu3BpGPS03vGqf0u-x59XDSmMyTeUgK82bvQBwxHLKHtsZJCEeAHZ28W3_wyKD72WDmsqdtJS7vB9YO7bLoMtm3WiTcKtNAjZEayeK7QC05UautQ1LTpBj1Fe3WY10f5jYNtC2mso7VsGjSoK6RdVQ1mFJKSGuksk0NFp9-OK8W21D8kvaUEMgKcpNePUPsXyL2tL82J24tea3z2IlDsuj0SKKalQKC47wZT-ZmfslVCt9NboNTDHiIChZIlgcJrFwqvGanb8KdsSbxdcyDxNvex2WNV1jnnVOpZJbd_DULdOyN1a30u3nXKgc6PQTcYTUddhl_Qutu5GKMria-ObEl6-9bZA_eZp1P2UVquWd4s6Rd79_Wr0J3-CmydsPQcwiH9M7QEsmda4ZqKynk4kC-I3gSNX8MTkoixaCEiSksewQjlfIlfZsKZpwX2qBs4liKAx7FMEn5F-M08HRJ-FeyF24WjaeZtIB__nl_i8B_a0A4fRY2V3Av13pLeW9J7S8oYe6klpSz7b7ekCE5aUl42v7akC8v9rdrT49v0p9FNWi10WGOlxtylvZetFuqT_9pJc3pTHbO1r2IyC7mKeBQvSjgvk2ymxRV13wnk5zr-vz7w_z-0g3KnyN9Oz75iBIqpZhOUJD4SQt5E0bTNXirov9E_QTxhIDui9ov3m8ZriK26_sn_l7Bwe5h5J_YlYp9rNjesY24Fy7P0lNuD-SuIXWqfkYQJO_F5TdchGzm9psE51fP-S4PZ6jW0-yCldAvr88Q76S-RfqjYvJ6P9ygRJ1EaHxp74fu6nTepOInWaXIO7oT159pnJ-w-9XhhLf8-TMBPMK2T-lTHs_VlMAtyv73EcCnno6sAwrZ3BLhSVDiH-95R11GD9VDhfPXwfOtgu06T-Ip-G6yjjVTz7QSV1g7oExT1g9AVhqt6E9d5nIsVbiKeAk-TLFmvdhue8zKta9aIrOZxs-ZVxJuqbhKs81zk1UpugEHKeMQjAJYkYcl41eRliglLeVT7xYh7IVXoqxl2pl2N0TdRkkOerpQoUdnxmgWgFNV3HI-AH-8-308bMAEw2Bq0VnbjXp3erMzGfywoh9aShClpnV0-76RTuPkkPgUGlfBH-8V_PKz-egkj9eHqZTUYtdk51_uzOYGCQNFKtxvKsOr2Xgfq4fAj6E33bdRgMeKxBIoZ0sMG_g4AAP__QZFZNw">