[llvm] 2578122 - [instcombine] Delete dead transform for reverse of binop (#143967)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 16 12:43:16 PDT 2025
Author: Philip Reames
Date: 2025-06-16T12:43:13-07:00
New Revision: 25781221d68a700eae679a19f701d4ad67e91dc9
URL: https://github.com/llvm/llvm-project/commit/25781221d68a700eae679a19f701d4ad67e91dc9
DIFF: https://github.com/llvm/llvm-project/commit/25781221d68a700eae679a19f701d4ad67e91dc9.diff
LOG: [instcombine] Delete dead transform for reverse of binop (#143967)
We canonicalize reverse to after a binop in foldVectorBinop, and
simplify reverse pairs in InstSimplify, so these elimination transforms
are redundant.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 8c8cc0859e4af..03897117861f6 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -3555,32 +3555,13 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
break;
}
case Intrinsic::vector_reverse: {
- Value *BO0, *BO1, *X, *Y;
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_VecReverse(m_Value(X)))) {
- // rev(binop rev(X), rev(Y)) --> binop X, Y
- if (match(BO1, m_VecReverse(m_Value(Y))))
- return replaceInstUsesWith(CI, BinaryOperator::CreateWithCopiedFlags(
- OldBinOp->getOpcode(), X, Y,
- OldBinOp, OldBinOp->getName(),
- II->getIterator()));
- // rev(binop rev(X), BO1Splat) --> binop X, BO1Splat
- if (isSplatValue(BO1))
- return replaceInstUsesWith(CI, BinaryOperator::CreateWithCopiedFlags(
- OldBinOp->getOpcode(), X, BO1,
- OldBinOp, OldBinOp->getName(),
- II->getIterator()));
- }
- // rev(binop BO0Splat, rev(Y)) --> binop BO0Splat, Y
- if (match(BO1, m_VecReverse(m_Value(Y))) && isSplatValue(BO0))
- return replaceInstUsesWith(CI,
- BinaryOperator::CreateWithCopiedFlags(
- OldBinOp->getOpcode(), BO0, Y, OldBinOp,
- OldBinOp->getName(), II->getIterator()));
- }
+ // Note: We canonicalize reverse after binops, so we don't need a
+ // corresponding binop case here. TODO: Consider canonicalizing
+ // reverse after fneg?
+
// rev(unop rev(X)) --> unop X
+ Value *X;
if (match(Vec, m_OneUse(m_UnOp(m_VecReverse(m_Value(X)))))) {
auto *OldUnOp = cast<UnaryOperator>(Vec);
auto *NewUnOp = UnaryOperator::CreateWithCopiedFlags(
More information about the llvm-commits
mailing list