[GISel]: Add helpers for easy building G_FCONSTANT along with matchers
Added helpers to build G_FCONSTANT, along with matching ConstantFP and
unit tests for the same.
Sample usage.
auto MIB = Builder.buildFConstant(s32, 0.5); // Build IEEESingle
For Matching the above
const ConstantFP* Tmp;
mi_match(DstReg, MRI, m_GFCst(Tmp));
https://reviews.llvm.org/D44128
reviewed by: volkan
llvm-svn: 327152
diff --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
index 0816084..d402d0b 100644
--- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -257,6 +257,42 @@
match = mi_match(MIBFabs->getOperand(0).getReg(), MRI, m_GFabs(m_Reg(Src)));
ASSERT_TRUE(match);
ASSERT_EQ(Src, Copy0s32->getOperand(0).getReg());
+
+ // Build and match FConstant.
+ auto MIBFCst = B.buildFConstant(s32, .5);
+ const ConstantFP *TmpFP{};
+ match = mi_match(MIBFCst->getOperand(0).getReg(), MRI, m_GFCst(TmpFP));
+ ASSERT_TRUE(match);
+ ASSERT_TRUE(TmpFP);
+ APFloat APF((float).5);
+ auto *CFP = ConstantFP::get(Context, APF);
+ ASSERT_EQ(CFP, TmpFP);
+
+ // Build double float.
+ LLT s64 = LLT::scalar(64);
+ auto MIBFCst64 = B.buildFConstant(s64, .5);
+ const ConstantFP *TmpFP64{};
+ match = mi_match(MIBFCst64->getOperand(0).getReg(), MRI, m_GFCst(TmpFP64));
+ ASSERT_TRUE(match);
+ ASSERT_TRUE(TmpFP64);
+ APFloat APF64(.5);
+ auto CFP64 = ConstantFP::get(Context, APF64);
+ ASSERT_EQ(CFP64, TmpFP64);
+ ASSERT_NE(TmpFP64, TmpFP);
+
+ // Build half float.
+ LLT s16 = LLT::scalar(16);
+ auto MIBFCst16 = B.buildFConstant(s16, .5);
+ const ConstantFP *TmpFP16{};
+ match = mi_match(MIBFCst16->getOperand(0).getReg(), MRI, m_GFCst(TmpFP16));
+ ASSERT_TRUE(match);
+ ASSERT_TRUE(TmpFP16);
+ bool Ignored;
+ APFloat APF16(.5);
+ APF16.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven, &Ignored);
+ auto CFP16 = ConstantFP::get(Context, APF16);
+ ASSERT_EQ(TmpFP16, CFP16);
+ ASSERT_NE(TmpFP16, TmpFP);
}
TEST(PatternMatchInstr, MatchExtendsTrunc) {