Skip to content

Commit a07f176

Browse files
committed
test fpext / fptrunc of scalars and vectors
1 parent f7aa627 commit a07f176

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

llvm/unittests/CodeGen/GlobalISel/KnownFPClassTest.cpp

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,104 @@ TEST_F(AArch64GISelMITest, TestFPClassCstVecNegZero) {
9696
EXPECT_EQ(true, Known.SignBit);
9797
}
9898

99+
TEST_F(AArch64GISelMITest, TestFPClassCstZeroFPExt) {
100+
StringRef MIRString = R"(
101+
%c0:_(s32) = G_FCONSTANT float 0.0
102+
%ext:_(s64) = nnan ninf G_FPEXT %c0
103+
%copy_vector:_(s64) = COPY %ext
104+
)";
105+
106+
setUp(MIRString);
107+
if (!TM)
108+
GTEST_SKIP();
109+
110+
Register CopyReg = Copies[Copies.size() - 1];
111+
MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
112+
Register SrcReg = FinalCopy->getOperand(1).getReg();
113+
114+
GISelValueTracking Info(*MF);
115+
116+
KnownFPClass Known = Info.computeKnownFPClass(SrcReg);
117+
118+
EXPECT_EQ(fcZero | fcNormal, Known.KnownFPClasses);
119+
EXPECT_EQ(std::nullopt, Known.SignBit);
120+
}
121+
122+
TEST_F(AArch64GISelMITest, TestFPClassCstVecZeroFPExt) {
123+
StringRef MIRString = R"(
124+
%c0:_(s32) = G_FCONSTANT float 0.0
125+
%c1:_(s32) = G_FCONSTANT float 0.0
126+
%c2:_(s32) = G_FCONSTANT float 0.0
127+
%vector:_(<3 x s32>) = G_BUILD_VECTOR %c0, %c1, %c2
128+
%ext:_(<3 x s64>) = nnan ninf G_FPEXT %vector
129+
%copy_vector:_(<3 x s64>) = COPY %ext
130+
)";
131+
132+
setUp(MIRString);
133+
if (!TM)
134+
GTEST_SKIP();
135+
136+
Register CopyReg = Copies[Copies.size() - 1];
137+
MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
138+
Register SrcReg = FinalCopy->getOperand(1).getReg();
139+
140+
GISelValueTracking Info(*MF);
141+
142+
KnownFPClass Known = Info.computeKnownFPClass(SrcReg);
143+
144+
EXPECT_EQ(fcZero | fcNormal, Known.KnownFPClasses);
145+
EXPECT_EQ(std::nullopt, Known.SignBit);
146+
}
147+
148+
TEST_F(AArch64GISelMITest, TestFPClassCstZeroFPTrunc) {
149+
StringRef MIRString = R"(
150+
%c0:_(s64) = G_FCONSTANT double 0.0
151+
%trunc:_(s32) = nnan ninf G_FPTRUNC %c0
152+
%copy_vector:_(s32) = COPY %trunc
153+
)";
154+
155+
setUp(MIRString);
156+
if (!TM)
157+
GTEST_SKIP();
158+
159+
Register CopyReg = Copies[Copies.size() - 1];
160+
MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
161+
Register SrcReg = FinalCopy->getOperand(1).getReg();
162+
163+
GISelValueTracking Info(*MF);
164+
165+
KnownFPClass Known = Info.computeKnownFPClass(SrcReg);
166+
167+
EXPECT_EQ(fcZero | fcPosSubnormal | fcPosNormal, Known.KnownFPClasses);
168+
EXPECT_EQ(false, Known.SignBit);
169+
}
170+
171+
TEST_F(AArch64GISelMITest, TestFPClassCstVecZeroFPTrunc) {
172+
StringRef MIRString = R"(
173+
%c0:_(s64) = G_FCONSTANT double 0.0
174+
%c1:_(s64) = G_FCONSTANT double 0.0
175+
%c2:_(s64) = G_FCONSTANT double 0.0
176+
%vector:_(<3 x s64>) = G_BUILD_VECTOR %c0, %c1, %c2
177+
%trunc:_(<3 x s32>) = nnan ninf G_FPTRUNC %vector
178+
%copy_vector:_(<3 x s32>) = COPY %trunc
179+
)";
180+
181+
setUp(MIRString);
182+
if (!TM)
183+
GTEST_SKIP();
184+
185+
Register CopyReg = Copies[Copies.size() - 1];
186+
MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
187+
Register SrcReg = FinalCopy->getOperand(1).getReg();
188+
189+
GISelValueTracking Info(*MF);
190+
191+
KnownFPClass Known = Info.computeKnownFPClass(SrcReg);
192+
193+
EXPECT_EQ(fcZero | fcPosSubnormal | fcPosNormal, Known.KnownFPClasses);
194+
EXPECT_EQ(false, Known.SignBit);
195+
}
196+
99197
TEST_F(AArch64GISelMITest, TestFPClassSelectPos0) {
100198
StringRef MIRString = R"(
101199
%ptr:_(p0) = G_IMPLICIT_DEF

0 commit comments

Comments
 (0)