@@ -1830,6 +1830,8 @@ TEST_F(ComputeKnownFPClassTest, FCmpToClassTest_NInf) {
1830
1830
" %A2 = fcmp uge double %arg, 0xFFF0000000000000"
1831
1831
" %A3 = fcmp ogt double %arg, 0xFFF0000000000000"
1832
1832
" %A4 = fcmp ule double %arg, 0xFFF0000000000000"
1833
+ " %A5 = fcmp oge double %arg, 0xFFF0000000000000"
1834
+ " %A6 = fcmp ult double %arg, 0xFFF0000000000000"
1833
1835
" ret i1 %A\n "
1834
1836
" }\n " );
1835
1837
@@ -1847,14 +1849,77 @@ TEST_F(ComputeKnownFPClassTest, FCmpToClassTest_NInf) {
1847
1849
auto [OgtVal, OgtClass] =
1848
1850
fcmpToClassTest (CmpInst::FCMP_OGT, *A3->getFunction (), A3->getOperand (0 ),
1849
1851
A3->getOperand (1 ));
1850
- EXPECT_EQ (nullptr , OgtVal);
1851
- EXPECT_EQ (fcAllFlags , OgtClass);
1852
+ EXPECT_EQ (A3-> getOperand ( 0 ) , OgtVal);
1853
+ EXPECT_EQ (~(fcNegInf | fcNan) , OgtClass);
1852
1854
1853
1855
auto [UleVal, UleClass] =
1854
1856
fcmpToClassTest (CmpInst::FCMP_ULE, *A4->getFunction (), A4->getOperand (0 ),
1855
1857
A4->getOperand (1 ));
1856
- EXPECT_EQ (nullptr , UleVal);
1857
- EXPECT_EQ (fcAllFlags, UleClass);
1858
+ EXPECT_EQ (A4->getOperand (0 ), UleVal);
1859
+ EXPECT_EQ (fcNegInf | fcNan, UleClass);
1860
+
1861
+ auto [OgeVal, OgeClass] =
1862
+ fcmpToClassTest (CmpInst::FCMP_OGE, *A5->getFunction (), A5->getOperand (0 ),
1863
+ A5->getOperand (1 ));
1864
+ EXPECT_EQ (A5->getOperand (0 ), OgeVal);
1865
+ EXPECT_EQ (~fcNan, OgeClass);
1866
+
1867
+ auto [UltVal, UltClass] =
1868
+ fcmpToClassTest (CmpInst::FCMP_ULT, *A6->getFunction (), A6->getOperand (0 ),
1869
+ A6->getOperand (1 ));
1870
+ EXPECT_EQ (A6->getOperand (0 ), UltVal);
1871
+ EXPECT_EQ (fcNan, UltClass);
1872
+ }
1873
+
1874
+ TEST_F (ComputeKnownFPClassTest, FCmpToClassTest_FabsNInf) {
1875
+ parseAssembly (" declare double @llvm.fabs.f64(double)\n "
1876
+ " define i1 @test(double %arg) {\n "
1877
+ " %fabs.arg = call double @llvm.fabs.f64(double %arg)\n "
1878
+ " %A = fcmp olt double %fabs.arg, 0xFFF0000000000000"
1879
+ " %A2 = fcmp uge double %fabs.arg, 0xFFF0000000000000"
1880
+ " %A3 = fcmp ogt double %fabs.arg, 0xFFF0000000000000"
1881
+ " %A4 = fcmp ule double %fabs.arg, 0xFFF0000000000000"
1882
+ " %A5 = fcmp oge double %fabs.arg, 0xFFF0000000000000"
1883
+ " %A6 = fcmp ult double %fabs.arg, 0xFFF0000000000000"
1884
+ " ret i1 %A\n "
1885
+ " }\n " );
1886
+
1887
+ Value *ArgVal = F->getArg (0 );
1888
+
1889
+ auto [OltVal, OltClass] = fcmpToClassTest (
1890
+ CmpInst::FCMP_OLT, *A->getFunction (), A->getOperand (0 ), A->getOperand (1 ));
1891
+ EXPECT_EQ (ArgVal, OltVal);
1892
+ EXPECT_EQ (fcNone, OltClass);
1893
+
1894
+ auto [UgeVal, UgeClass] =
1895
+ fcmpToClassTest (CmpInst::FCMP_UGE, *A2->getFunction (), A2->getOperand (0 ),
1896
+ A2->getOperand (1 ));
1897
+ EXPECT_EQ (ArgVal, UgeVal);
1898
+ EXPECT_EQ (fcAllFlags, UgeClass);
1899
+
1900
+ auto [OgtVal, OgtClass] =
1901
+ fcmpToClassTest (CmpInst::FCMP_OGT, *A3->getFunction (), A3->getOperand (0 ),
1902
+ A3->getOperand (1 ));
1903
+ EXPECT_EQ (ArgVal, OgtVal);
1904
+ EXPECT_EQ (~fcNan, OgtClass);
1905
+
1906
+ auto [UleVal, UleClass] =
1907
+ fcmpToClassTest (CmpInst::FCMP_ULE, *A4->getFunction (), A4->getOperand (0 ),
1908
+ A4->getOperand (1 ));
1909
+ EXPECT_EQ (ArgVal, UleVal);
1910
+ EXPECT_EQ (fcNan, UleClass);
1911
+
1912
+ auto [OgeVal, OgeClass] =
1913
+ fcmpToClassTest (CmpInst::FCMP_OGE, *A5->getFunction (), A5->getOperand (0 ),
1914
+ A5->getOperand (1 ));
1915
+ EXPECT_EQ (ArgVal, OgeVal);
1916
+ EXPECT_EQ (~fcNan, OgeClass);
1917
+
1918
+ auto [UltVal, UltClass] =
1919
+ fcmpToClassTest (CmpInst::FCMP_ULT, *A6->getFunction (), A6->getOperand (0 ),
1920
+ A6->getOperand (1 ));
1921
+ EXPECT_EQ (ArgVal, UltVal);
1922
+ EXPECT_EQ (fcNan, UltClass);
1858
1923
}
1859
1924
1860
1925
TEST_F (ComputeKnownFPClassTest, FCmpToClassTest_PInf) {
0 commit comments