[llvm] [KnownFPClass] Fix KnownFPClass::frem subnormal handling and improve deductions. (PR #219303)

Eric Ross via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 3 20:24:47 PDT 2026


================
@@ -1920,6 +1920,23 @@ TEST_F(ComputeKnownFPClassTest, MaximumNumSignBit) {
   expectKnownFPClass(fcPositive, false, A7);
 }
 
+TEST_F(ComputeKnownFPClassTest, FRemDemandRHSForSNaN) {
+  parseAssembly("define float @test(float nofpclass(snan) %lhs, "
+                "float nofpclass(snan) %rhs) {\n"
+                "  %A = frem float %lhs, %rhs\n"
+                "  ret float %A\n"
+                "}\n");
+
+  KnownFPClass KnownSNan = computeKnownFPClass(A, M->getDataLayout(), fcSNan);
+  KnownFPClass KnownQNan = computeKnownFPClass(A, M->getDataLayout(), fcQNan);
+
+  EXPECT_TRUE(KnownSNan.isKnownNever(fcSNan));
+  EXPECT_FALSE(KnownSNan.isKnownNever(fcQNan));
+
+  EXPECT_TRUE(KnownQNan.isKnownNever(fcSNan));
+  EXPECT_FALSE(KnownQNan.isKnownNever(fcQNan));
+}
----------------
ZERICO2005 wrote:

This test is for `ValueTracking.cpp` instead of `GISelValueTracking.cpp`.

Otherwise it tests that `fcSNan` is still ruled out when computing `computeKnownFPClass(fcQNan)`. Whereas the lit tests compute the equivalent of `computeKnownFPClass(fcAllFlags)`

https://github.com/llvm/llvm-project/pull/219303


More information about the llvm-commits mailing list