[llvm-branch-commits] [llvm] [DA] Check nsw flags for addrecs in the Exact RDIV test (PR #189536)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Mar 30 22:51:08 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-analysis

Author: Ruoyu Qiu (cabbaken)

<details>
<summary>Changes</summary>

This patch adds a check to ensure that the addrecs have nsw flags at the
beginning of the Exact SIV test. If either of them doesn't have, the
analysis bails out. This check is necessary because the subsequent
process in the Exact SIV test assumes that they don't wrap.


---
Full diff: https://github.com/llvm/llvm-project/pull/189536.diff


2 Files Affected:

- (modified) llvm/lib/Analysis/DependenceAnalysis.cpp (+4) 
- (modified) llvm/test/Analysis/DependenceAnalysis/exact-rdiv-addrec-wrap.ll (+1-1) 


``````````diff
diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp
index d9dc6beeca284..4e32de824d3ac 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1961,6 +1961,10 @@ bool DependenceInfo::exactRDIVtest(const SCEVAddRecExpr *Src,
   LLVM_DEBUG(dbgs() << "\t    SrcConst = " << *SrcConst << "\n");
   LLVM_DEBUG(dbgs() << "\t    DstConst = " << *DstConst << "\n");
   ++ExactRDIVapplications;
+
+  if (!Src->hasNoSignedWrap() || !Dst->hasNoSignedWrap())
+    return false;
+
   const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst);
   LLVM_DEBUG(dbgs() << "\t    Delta = " << *Delta << "\n");
   const SCEVConstant *ConstDelta = dyn_cast<SCEVConstant>(Delta);
diff --git a/llvm/test/Analysis/DependenceAnalysis/exact-rdiv-addrec-wrap.ll b/llvm/test/Analysis/DependenceAnalysis/exact-rdiv-addrec-wrap.ll
index 0fccef544d2ac..5805d19d01bbe 100644
--- a/llvm/test/Analysis/DependenceAnalysis/exact-rdiv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/exact-rdiv-addrec-wrap.ll
@@ -38,7 +38,7 @@ define void @exact_rdiv_no_nsw(ptr %A) {
 ; CHECK-EXACT-RDIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
 ; CHECK-EXACT-RDIV-NEXT:    da analyze - output [*]!
 ; CHECK-EXACT-RDIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-EXACT-RDIV-NEXT:    da analyze - none!
+; CHECK-EXACT-RDIV-NEXT:    da analyze - output [|<]!
 ; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
 ; CHECK-EXACT-RDIV-NEXT:    da analyze - output [*]!
 ;

``````````

</details>


https://github.com/llvm/llvm-project/pull/189536


More information about the llvm-branch-commits mailing list