summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
diff options
context:
space:
mode:
authorAditya Nandakumar <aditya_nandakumar@apple.com>2018-03-09 17:31:51 +0000
committerAditya Nandakumar <aditya_nandakumar@apple.com>2018-03-09 17:31:51 +0000
commit91fc4e09499c24e9184853e9a53a953bdea8a356 (patch)
tree2ecf5eaad712fa1bda8e20854ff909d8b98c559f /llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
parent2e55ee77e2b9f0d13d4a85852059d258a697cc5c (diff)
downloadbcm5719-llvm-91fc4e09499c24e9184853e9a53a953bdea8a356.tar.gz
bcm5719-llvm-91fc4e09499c24e9184853e9a53a953bdea8a356.zip
[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
Diffstat (limited to 'llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp')
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
index 0816084c690..d402d0b1e11 100644
--- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -257,6 +257,42 @@ TEST(PatternMatchInstr, MatchFPUnaryOp) {
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) {
OpenPOWER on IntegriCloud