[PATCH] D47547: [GISel]: Some more pattern match opcodes
Aditya Nandakumar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 30 11:31:05 PDT 2018
aditya_nandakumar created this revision.
aditya_nandakumar added reviewers: volkan, dsanders, aemerson, qcolombet, bogner.
Some more matchers for opcodes.
Repository:
rL LLVM
https://reviews.llvm.org/D47547
Files:
include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
Index: unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
===================================================================
--- unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
+++ unittests/CodeGen/GlobalISel/PatternMatchTest.cpp
@@ -212,6 +212,14 @@
ASSERT_EQ(Cst, 42);
ASSERT_EQ(Src0, Copies[0]);
+ // FSUB
+ auto MIBFSub = B.buildInstr(TargetOpcode::G_FSUB, s64, Copies[0],
+ B.buildConstant(s64, 42));
+ match = mi_match(MIBFSub->getOperand(0).getReg(), MRI,
+ m_GFSub(m_Reg(Src0), m_Reg()));
+ ASSERT_TRUE(match);
+ ASSERT_EQ(Src0, Copies[0]);
+
// Build AND %0, %1
auto MIBAnd = B.buildAnd(s64, Copies[0], Copies[1]);
// Try to match AND.
@@ -283,7 +291,13 @@
auto MIBFabs = B.buildInstr(TargetOpcode::G_FABS, s32, Copy0s32);
bool match = mi_match(MIBFabs->getOperand(0).getReg(), MRI, m_GFabs(m_Reg()));
ASSERT_TRUE(match);
+
unsigned Src;
+ auto MIBFNeg = B.buildInstr(TargetOpcode::G_FNEG, s32, Copy0s32);
+ match = mi_match(MIBFNeg->getOperand(0).getReg(), MRI, m_GFNeg(m_Reg(Src)));
+ ASSERT_TRUE(match);
+ ASSERT_EQ(Src, Copy0s32->getOperand(0).getReg());
+
match = mi_match(MIBFabs->getOperand(0).getReg(), MRI, m_GFabs(m_Reg(Src)));
ASSERT_TRUE(match);
ASSERT_EQ(Src, Copy0s32->getOperand(0).getReg());
Index: include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
===================================================================
--- include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
+++ include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
@@ -221,6 +221,12 @@
return BinaryOp_match<LHS, RHS, TargetOpcode::G_FMUL, true>(L, R);
}
+template <typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>
+m_GFSub(const LHS &L, const RHS &R) {
+ return BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>(L, R);
+}
+
template <typename LHS, typename RHS>
inline BinaryOp_match<LHS, RHS, TargetOpcode::G_AND, true>
m_GAnd(const LHS &L, const RHS &R) {
@@ -304,6 +310,11 @@
return UnaryOp_match<SrcTy, TargetOpcode::G_FABS>(Src);
}
+template <typename SrcTy>
+inline UnaryOp_match<SrcTy, TargetOpcode::G_FNEG> m_GFNeg(const SrcTy &Src) {
+ return UnaryOp_match<SrcTy, TargetOpcode::G_FNEG>(Src);
+}
+
template <typename SrcTy>
inline UnaryOp_match<SrcTy, TargetOpcode::COPY> m_Copy(SrcTy &&Src) {
return UnaryOp_match<SrcTy, TargetOpcode::COPY>(std::forward<SrcTy>(Src));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47547.149171.patch
Type: text/x-patch
Size: 2424 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180530/68085989/attachment.bin>
More information about the llvm-commits
mailing list