forked from OSchip/llvm-project
PatternMatch: Add wrappers for fabs and canonicalize
llvm-svn: 338111
This commit is contained in:
parent
cdc92ff254
commit
d149650760
|
@ -1602,6 +1602,16 @@ inline typename m_Intrinsic_Ty<Opnd0>::Ty m_BSwap(const Opnd0 &Op0) {
|
|||
return m_Intrinsic<Intrinsic::bswap>(Op0);
|
||||
}
|
||||
|
||||
template <typename Opnd0>
|
||||
inline typename m_Intrinsic_Ty<Opnd0>::Ty m_FAbs(const Opnd0 &Op0) {
|
||||
return m_Intrinsic<Intrinsic::fabs>(Op0);
|
||||
}
|
||||
|
||||
template <typename Opnd0>
|
||||
inline typename m_Intrinsic_Ty<Opnd0>::Ty m_FCanonicalize(const Opnd0 &Op0) {
|
||||
return m_Intrinsic<Intrinsic::canonicalize>(Op0);
|
||||
}
|
||||
|
||||
template <typename Opnd0, typename Opnd1>
|
||||
inline typename m_Intrinsic_Ty<Opnd0, Opnd1>::Ty m_FMin(const Opnd0 &Op0,
|
||||
const Opnd1 &Op1) {
|
||||
|
|
|
@ -2098,8 +2098,8 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||
}
|
||||
|
||||
// fma fabs(x), fabs(x), z -> fma x, x, z
|
||||
if (match(Src0, m_Intrinsic<Intrinsic::fabs>(m_Value(X))) &&
|
||||
match(Src1, m_Intrinsic<Intrinsic::fabs>(m_Specific(X)))) {
|
||||
if (match(Src0, m_FAbs(m_Value(X))) &&
|
||||
match(Src1, m_FAbs(m_Specific(X)))) {
|
||||
II->setArgOperand(0, X);
|
||||
II->setArgOperand(1, X);
|
||||
return II;
|
||||
|
@ -2146,7 +2146,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||
Value *SrcSrc;
|
||||
Value *Src = II->getArgOperand(0);
|
||||
if (match(Src, m_FNeg(m_Value(SrcSrc))) ||
|
||||
match(Src, m_Intrinsic<Intrinsic::fabs>(m_Value(SrcSrc)))) {
|
||||
match(Src, m_FAbs(m_Value(SrcSrc)))) {
|
||||
// cos(-x) -> cos(x)
|
||||
// cos(fabs(x)) -> cos(x)
|
||||
II->setArgOperand(0, SrcSrc);
|
||||
|
|
Loading…
Reference in New Issue