@@ -71,6 +71,7 @@ class ValueTrackingTest : public testing::Test {
71
71
A2 = findInstructionByNameOrNull (F, " A2" );
72
72
A3 = findInstructionByNameOrNull (F, " A3" );
73
73
A4 = findInstructionByNameOrNull (F, " A4" );
74
+ A5 = findInstructionByNameOrNull (F, " A5" );
74
75
75
76
CxtI = findInstructionByNameOrNull (F, " CxtI" );
76
77
CxtI2 = findInstructionByNameOrNull (F, " CxtI2" );
@@ -82,7 +83,7 @@ class ValueTrackingTest : public testing::Test {
82
83
Function *F = nullptr ;
83
84
Instruction *A = nullptr ;
84
85
// Instructions (optional)
85
- Instruction *A2 = nullptr , *A3 = nullptr , *A4 = nullptr ;
86
+ Instruction *A2 = nullptr , *A3 = nullptr , *A4 = nullptr , *A5 = nullptr ;
86
87
87
88
// Context instructions (optional)
88
89
Instruction *CxtI = nullptr , *CxtI2 = nullptr , *CxtI3 = nullptr ;
@@ -1540,6 +1541,40 @@ TEST_F(ComputeKnownFPClassTest, SIToFP) {
1540
1541
expectKnownFPClass (~fcNan, std::nullopt, A3);
1541
1542
}
1542
1543
1544
+ TEST_F (ComputeKnownFPClassTest, FAdd) {
1545
+ parseAssembly (
1546
+ " define float @test(float nofpclass(nan inf) %nnan.ninf, float nofpclass(nan) %nnan, float nofpclass(qnan) %no.qnan, float %unknown) {\n "
1547
+ " %A = fadd float %nnan, %nnan.ninf"
1548
+ " %A2 = fadd float %nnan.ninf, %nnan"
1549
+ " %A3 = fadd float %nnan.ninf, %unknown"
1550
+ " %A4 = fadd float %nnan.ninf, %no.qnan"
1551
+ " %A5 = fadd float %nnan, %nnan"
1552
+ " ret float %A\n "
1553
+ " }\n " );
1554
+ expectKnownFPClass (fcFinite | fcInf, std::nullopt, A);
1555
+ expectKnownFPClass (fcFinite | fcInf, std::nullopt, A2);
1556
+ expectKnownFPClass (fcAllFlags, std::nullopt, A3);
1557
+ expectKnownFPClass (fcAllFlags, std::nullopt, A4);
1558
+ expectKnownFPClass (fcAllFlags, std::nullopt, A5);
1559
+ }
1560
+
1561
+ TEST_F (ComputeKnownFPClassTest, FSub) {
1562
+ parseAssembly (
1563
+ " define float @test(float nofpclass(nan inf) %nnan.ninf, float nofpclass(nan) %nnan, float nofpclass(qnan) %no.qnan, float %unknown) {\n "
1564
+ " %A = fsub float %nnan, %nnan.ninf"
1565
+ " %A2 = fsub float %nnan.ninf, %nnan"
1566
+ " %A3 = fsub float %nnan.ninf, %unknown"
1567
+ " %A4 = fsub float %nnan.ninf, %no.qnan"
1568
+ " %A5 = fsub float %nnan, %nnan"
1569
+ " ret float %A\n "
1570
+ " }\n " );
1571
+ expectKnownFPClass (fcFinite | fcInf, std::nullopt, A);
1572
+ expectKnownFPClass (fcFinite | fcInf, std::nullopt, A2);
1573
+ expectKnownFPClass (fcAllFlags, std::nullopt, A3);
1574
+ expectKnownFPClass (fcAllFlags, std::nullopt, A4);
1575
+ expectKnownFPClass (fcAllFlags, std::nullopt, A5);
1576
+ }
1577
+
1543
1578
TEST_F (ValueTrackingTest, isNonZeroRecurrence) {
1544
1579
parseAssembly (R"(
1545
1580
define i1 @test(i8 %n, i8 %r) {
0 commit comments