[llvm] [AArch64][SVE] Optimize svand_z/svorr_z with all-true predicates. (PR #160408)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 26 05:51:26 PDT 2025
================
@@ -1587,8 +1594,21 @@ static bool isAllActivePredicate(Value *Pred) {
if (cast<ScalableVectorType>(Pred->getType())->getMinNumElements() <=
cast<ScalableVectorType>(UncastedPred->getType())->getMinNumElements())
Pred = UncastedPred;
- auto *C = dyn_cast<Constant>(Pred);
- return (C && C->isAllOnesValue());
+
+ // Also look through just convert.to.svbool if the input is an all-true splat
+ Value *ConvertArg;
+ if (match(Pred, m_Intrinsic<Intrinsic::aarch64_sve_convert_to_svbool>(
+ m_Value(ConvertArg))))
+ Pred = ConvertArg;
+ // Check for splat(i1 true) pattern used by svptrue intrinsics
+ if (auto *C = dyn_cast<Constant>(Pred)) {
+ if (C->isAllOnesValue())
+ return true;
+ if (auto *SplatVal = C->getSplatValue())
+ if (auto *CI = dyn_cast<ConstantInt>(SplatVal))
+ return CI->isOne();
+ }
----------------
paulwalker-arm wrote:
This is not a valid transformation. I'll elaborate more below (see test_sve_and_z_all_true_right).
https://github.com/llvm/llvm-project/pull/160408
More information about the llvm-commits
mailing list