summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAditya Nandakumar <aditya_nandakumar@apple.com>2018-02-13 20:09:13 +0000
committerAditya Nandakumar <aditya_nandakumar@apple.com>2018-02-13 20:09:13 +0000
commit6250b18831d930b50b73ea56c03d85f1da98d23c (patch)
treecc569add58e34b3e89a8304a4bc7ab516b59e418
parent413495fbe7b0408803436c9695aa087d3b174b9f (diff)
downloadbcm5719-llvm-6250b18831d930b50b73ea56c03d85f1da98d23c.tar.gz
bcm5719-llvm-6250b18831d930b50b73ea56c03d85f1da98d23c.zip
[GISel]: Add Pattern Matcher for G_FMUL.
https://reviews.llvm.org/D43206 llvm-svn: 325044
-rw-r--r--llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h6
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp9
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
index caa21647688..c6c95462b28 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
@@ -202,6 +202,12 @@ m_GFAdd(const LHS &L, const RHS &R) {
return BinaryOp_match<LHS, RHS, TargetOpcode::G_FADD, true>(L, R);
}
+template <typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, TargetOpcode::G_FMUL, true>
+m_GFMul(const LHS &L, const RHS &R) {
+ return BinaryOp_match<LHS, RHS, TargetOpcode::G_FMUL, true>(L, R);
+}
+
// Helper for unary instructions (G_[ZSA]EXT/G_TRUNC) etc
template <typename SrcTy, unsigned Opcode> struct UnaryOp_match {
SrcTy L;
diff --git a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
index dd26e9b11fe..dc41e5425d4 100644
--- a/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -201,6 +201,15 @@ TEST(PatternMatchInstr, MatchBinaryOp) {
match = mi_match(MIBSub->getOperand(0).getReg(), MRI,
m_GSub(m_ICst(Cst), m_Reg(Src0)));
ASSERT_FALSE(match);
+
+ auto MIBFMul = B.buildInstr(TargetOpcode::G_FMUL, s64, Copies[0],
+ B.buildConstant(s64, 42));
+ // Match and test commutativity for FMUL.
+ match = mi_match(MIBFMul->getOperand(0).getReg(), MRI,
+ m_GFMul(m_ICst(Cst), m_Reg(Src0)));
+ ASSERT_TRUE(match);
+ ASSERT_EQ(Cst, (uint64_t)42);
+ ASSERT_EQ(Src0, Copies[0]);
}
TEST(PatternMatchInstr, MatchExtendsTrunc) {
OpenPOWER on IntegriCloud