Value *Vec = II->getArgOperand(0);
if (match(Vec, m_OneUse(m_BinOp(m_Value(BO0), m_Value(BO1))))) {
auto *OldBinOp = cast<BinaryOperator>(Vec);
- if (match(BO0, m_Intrinsic<Intrinsic::experimental_vector_reverse>(
- m_Value(X)))) {
+ if (match(BO0, m_VecReverse(m_Value(X)))) {
// rev(binop rev(X), rev(Y)) --> binop X, Y
- if (match(BO1, m_Intrinsic<Intrinsic::experimental_vector_reverse>(
- m_Value(Y))))
+ if (match(BO1, m_VecReverse(m_Value(Y))))
return replaceInstUsesWith(CI,
BinaryOperator::CreateWithCopiedFlags(
OldBinOp->getOpcode(), X, Y, OldBinOp,
OldBinOp, OldBinOp->getName(), II));
}
// rev(binop BO0Splat, rev(Y)) --> binop BO0Splat, Y
- if (match(BO1, m_Intrinsic<Intrinsic::experimental_vector_reverse>(
- m_Value(Y))) &&
- isSplatValue(BO0))
+ if (match(BO1, m_VecReverse(m_Value(Y))) && isSplatValue(BO0))
return replaceInstUsesWith(CI, BinaryOperator::CreateWithCopiedFlags(
OldBinOp->getOpcode(), BO0, Y,
OldBinOp, OldBinOp->getName(), II));
}
// rev(unop rev(X)) --> unop X
- if (match(Vec, m_OneUse(m_UnOp(
- m_Intrinsic<Intrinsic::experimental_vector_reverse>(
- m_Value(X)))))) {
+ if (match(Vec, m_OneUse(m_UnOp(m_VecReverse(m_Value(X)))))) {
auto *OldUnOp = cast<UnaryOperator>(Vec);
auto *NewUnOp = UnaryOperator::CreateWithCopiedFlags(
OldUnOp->getOpcode(), X, OldUnOp, OldUnOp->getName(), II);