mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[GISel]: Add pattern matchers for G_BITCAST/PTRTOINT/INTTOPTR
Adds pattern matchers for the above along with unit tests for the same. https://reviews.llvm.org/D43479 llvm-svn: 325542
This commit is contained in:
parent
ec74b351d9
commit
d8a3a0d897
@ -262,6 +262,24 @@ inline UnaryOp_match<SrcTy, TargetOpcode::G_TRUNC> m_GTrunc(const SrcTy &Src) {
|
||||
return UnaryOp_match<SrcTy, TargetOpcode::G_TRUNC>(Src);
|
||||
}
|
||||
|
||||
template <typename SrcTy>
|
||||
inline UnaryOp_match<SrcTy, TargetOpcode::G_BITCAST>
|
||||
m_GBitcast(const SrcTy &Src) {
|
||||
return UnaryOp_match<SrcTy, TargetOpcode::G_BITCAST>(Src);
|
||||
}
|
||||
|
||||
template <typename SrcTy>
|
||||
inline UnaryOp_match<SrcTy, TargetOpcode::G_PTRTOINT>
|
||||
m_GPtrToInt(const SrcTy &Src) {
|
||||
return UnaryOp_match<SrcTy, TargetOpcode::G_PTRTOINT>(Src);
|
||||
}
|
||||
|
||||
template <typename SrcTy>
|
||||
inline UnaryOp_match<SrcTy, TargetOpcode::G_INTTOPTR>
|
||||
m_GIntToPtr(const SrcTy &Src) {
|
||||
return UnaryOp_match<SrcTy, TargetOpcode::G_INTTOPTR>(Src);
|
||||
}
|
||||
|
||||
template <typename SrcTy>
|
||||
inline UnaryOp_match<SrcTy, TargetOpcode::G_FPTRUNC>
|
||||
m_GFPTrunc(const SrcTy &Src) {
|
||||
|
@ -313,10 +313,24 @@ TEST(PatternMatchInstr, MatchSpecificType) {
|
||||
// Try to match the destination type of a bitcast.
|
||||
LLT v2s32 = LLT::vector(2, 32);
|
||||
auto MIBCast = B.buildCast(v2s32, Copies[0]);
|
||||
ASSERT_TRUE(
|
||||
mi_match(MIBCast->getOperand(0).getReg(), MRI, m_GBitcast(m_Reg())));
|
||||
ASSERT_TRUE(
|
||||
mi_match(MIBCast->getOperand(0).getReg(), MRI, m_SpecificType(v2s32)));
|
||||
ASSERT_TRUE(
|
||||
mi_match(MIBCast->getOperand(1).getReg(), MRI, m_SpecificType(s64)));
|
||||
|
||||
// Build a PTRToInt and INTTOPTR and match and test them.
|
||||
LLT PtrTy = LLT::pointer(0, 64);
|
||||
auto MIBIntToPtr = B.buildCast(PtrTy, Copies[0]);
|
||||
auto MIBPtrToInt = B.buildCast(s64, MIBIntToPtr);
|
||||
unsigned Src0;
|
||||
|
||||
// match the ptrtoint(inttoptr reg)
|
||||
bool match = mi_match(MIBPtrToInt->getOperand(0).getReg(), MRI,
|
||||
m_GPtrToInt(m_GIntToPtr(m_Reg(Src0))));
|
||||
ASSERT_TRUE(match);
|
||||
ASSERT_EQ(Src0, Copies[0]);
|
||||
}
|
||||
|
||||
TEST(PatternMatchInstr, MatchCombinators) {
|
||||
|
Loading…
Reference in New Issue
Block a user