[llvm] [VectorCombine] Fold reduce(trunc(x)) -> trunc(reduce(x)) iff cost effective (PR #81852)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 15 08:56:58 PST 2024
================
@@ -1526,6 +1527,67 @@ bool VectorCombine::foldShuffleFromReductions(Instruction &I) {
return foldSelectShuffle(*Shuffle, true);
}
+/// Determine if its more efficient to fold:
+/// reduce(trunc(x)) -> trunc(reduce(x)).
+bool VectorCombine::foldTruncFromReductions(Instruction &I) {
+ auto *II = dyn_cast<IntrinsicInst>(&I);
+ if (!II)
+ return false;
+
+ unsigned ReductionOpc = 0;
+ switch (II->getIntrinsicID()) {
+ case Intrinsic::vector_reduce_add:
+ ReductionOpc = Instruction::Add;
+ break;
+ case Intrinsic::vector_reduce_mul:
+ ReductionOpc = Instruction::Mul;
+ break;
+ case Intrinsic::vector_reduce_and:
+ ReductionOpc = Instruction::And;
+ break;
+ case Intrinsic::vector_reduce_or:
+ ReductionOpc = Instruction::Or;
+ break;
+ case Intrinsic::vector_reduce_xor:
+ ReductionOpc = Instruction::Xor;
+ break;
+ default:
+ return false;
+ }
----------------
nikic wrote:
Surely this switch already exists somewhere?
https://github.com/llvm/llvm-project/pull/81852
More information about the llvm-commits
mailing list