[llvm] [VectorCombine] Add foldShuffleOfIntrinsics. (PR #106502)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 10 03:13:15 PDT 2024
================
@@ -1673,6 +1674,89 @@ bool VectorCombine::foldShuffleOfShuffles(Instruction &I) {
return true;
}
+/// Try to convert
+/// "shuffle (intrinsic), (intrinsic)" into "intrinsic (shuffle), (shuffle)".
+bool VectorCombine::foldShuffleOfIntrinsics(Instruction &I) {
+ Value *V0, *V1;
+ ArrayRef<int> OldMask;
+ if (!match(&I, m_Shuffle(m_OneUse(m_Value(V0)), m_OneUse(m_Value(V1)),
+ m_Mask(OldMask))))
+ return false;
+
+ auto *II0 = dyn_cast<IntrinsicInst>(V0);
+ auto *II1 = dyn_cast<IntrinsicInst>(V1);
+ if (!II0 || !II1)
+ return false;
+
+ Intrinsic::ID IID = II0->getIntrinsicID();
+ if (IID != II1->getIntrinsicID())
+ return false;
+
+ auto *ShuffleDstTy = dyn_cast<FixedVectorType>(I.getType());
+ auto *II0Ty = dyn_cast<FixedVectorType>(II0->getType());
+ if (!ShuffleDstTy || !II0Ty)
+ return false;
+
+ if (!isTriviallyVectorizable(IID))
+ return false;
+
+ for (unsigned I = 0; I != II0->arg_size(); ++I)
----------------
RKSimon wrote:
(style) `for (unsigned I = 0, E = II0->arg_size(); I != E; ++I)`
https://github.com/llvm/llvm-project/pull/106502
More information about the llvm-commits
mailing list