[llvm] [AArch64][SVE] Use loop.dependence.war.mask in vector.memcheck (PR #175943)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 10 08:30:53 PST 2026
================
@@ -2173,38 +2173,85 @@ Value *llvm::addRuntimeChecks(
return MemoryRuntimeCheck;
}
-Value *llvm::addDiffRuntimeChecks(
- Instruction *Loc, ArrayRef<PointerDiffInfo> Checks, SCEVExpander &Expander,
- function_ref<Value *(IRBuilderBase &, unsigned)> GetVF, unsigned IC) {
+Value *llvm::addDiffRuntimeChecks(Instruction *Loc,
+ ArrayRef<PointerDiffInfo> Checks,
+ SCEVExpander &Expander, ElementCount VF,
+ unsigned IC, const TargetTransformInfo &TTI,
+ TTI::TargetCostKind CostKind) {
LLVMContext &Ctx = Loc->getContext();
IRBuilder ChkBuilder(Ctx, InstSimplifyFolder(Loc->getDataLayout()));
ChkBuilder.SetInsertPoint(Loc);
+ Value *RuntimeVF = nullptr;
// Our instructions might fold to a constant.
Value *MemoryRuntimeCheck = nullptr;
-
auto &SE = *Expander.getSE();
+
+ constexpr Intrinsic::ID LoopDeskMaskIID = Intrinsic::loop_dependence_war_mask;
+ auto LoopDepMaskIsCheap = [&](Type *MaskTy, Value *AccessSize) {
+ Value *NullPtr = ConstantPointerNull::get(PointerType::getUnqual(Ctx));
+ // The pointer values should not change the cost. The access size (constant)
+ // is needed to by targets to cost the mask.
+ IntrinsicCostAttributes ICA(LoopDeskMaskIID, MaskTy,
+ {NullPtr, NullPtr, AccessSize});
+ InstructionCost Cost = TTI.getIntrinsicInstrCost(ICA, CostKind);
+ return Cost.isValid() && Cost <= 1;
+ };
----------------
MacDue wrote:
Done :+1:
https://github.com/llvm/llvm-project/pull/175943
More information about the llvm-commits
mailing list