[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)
Ryotaro Kasuga via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Mar 10 23:18:05 PDT 2026
https://github.com/kasuga-fj updated https://github.com/llvm/llvm-project/pull/185579
>From 51e306ce6d032b2ef4d050466c705ee594021c4e Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga <kasuga.ryotaro at fujitsu.com>
Date: Mon, 9 Mar 2026 09:22:33 +0000
Subject: [PATCH] [DA] Add nsw check for addrecs in the Weak Zero SIV tests
---
llvm/lib/Analysis/DependenceAnalysis.cpp | 3 ++
.../weak-zero-siv-addrec-wrap.ll | 47 ++++++++++++-------
2 files changed, 34 insertions(+), 16 deletions(-)
diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp
index b62425d0c492c..d9f924f87414e 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1799,6 +1799,9 @@ bool DependenceInfo::weakZeroSIVtestImpl(const SCEVAddRecExpr *AR,
return true;
}
+ if (!AR->hasNoSignedWrap())
+ return false;
+
if (Const == ARConst && SE->isKnownNonZero(ARCoeff)) {
if (Level < CommonLevels) {
Result.DV[Level].Direction &= Dependence::DVEntry::LE;
diff --git a/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll b/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
index 09e910542d68a..0235acb8482ae 100644
--- a/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
@@ -22,13 +22,21 @@
; FIXME: DependenceAnalysis currently misses the dependency.
;
define void @weak_zero_src_siv_addrec_wrap(ptr %A, i64 %n) {
-; CHECK-LABEL: 'weak_zero_src_siv_addrec_wrap'
-; CHECK-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
-; CHECK-NEXT: da analyze - output [S]!
-; CHECK-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-NEXT: da analyze - none!
-; CHECK-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-NEXT: da analyze - output [*]!
+; CHECK-ALL-LABEL: 'weak_zero_src_siv_addrec_wrap'
+; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
+; CHECK-ALL-NEXT: da analyze - output [S]!
+; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-ALL-NEXT: da analyze - none!
+; CHECK-ALL-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-ALL-NEXT: da analyze - output [*]!
+;
+; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_zero_src_siv_addrec_wrap'
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [S]!
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [*|<]!
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [*]!
;
entry:
br label %loop.header
@@ -74,13 +82,21 @@ exit:
; FIXME: DependenceAnalysis currently misses the dependency.
;
define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
-; CHECK-LABEL: 'weak_zero_dst_siv_addrec_wrap'
-; CHECK-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
-; CHECK-NEXT: da analyze - output [*]!
-; CHECK-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-NEXT: da analyze - none!
-; CHECK-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-NEXT: da analyze - output [S]!
+; CHECK-ALL-LABEL: 'weak_zero_dst_siv_addrec_wrap'
+; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
+; CHECK-ALL-NEXT: da analyze - output [*]!
+; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-ALL-NEXT: da analyze - none!
+; CHECK-ALL-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-ALL-NEXT: da analyze - output [S]!
+;
+; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_zero_dst_siv_addrec_wrap'
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [*]!
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [*|<]!
+; CHECK-WEAK-ZERO-SIV-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-WEAK-ZERO-SIV-NEXT: da analyze - output [S]!
;
entry:
br label %loop.header
@@ -108,5 +124,4 @@ exit:
ret void
}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK-ALL: {{.*}}
-; CHECK-WEAK-ZERO-SIV: {{.*}}
+; CHECK: {{.*}}
More information about the llvm-branch-commits
mailing list