[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-26 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj edited 
https://github.com/llvm/llvm-project/pull/185579
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-26 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 83fbbb88ac1b30c58008b8d29aee62002d84eeca Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 8d265e5a6b4e5..185019ce2ce36 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1807,6 +1807,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-26 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 83fbbb88ac1b30c58008b8d29aee62002d84eeca Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 8d265e5a6b4e5..185019ce2ce36 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1807,6 +1807,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-24 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 45c7b8ce5d59d565db28c6fa2344f3917c6521be Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 6e8189c06d989..5d800527137b5 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1810,6 +1810,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-24 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 45c7b8ce5d59d565db28c6fa2344f3917c6521be Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 6e8189c06d989..5d800527137b5 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1810,6 +1810,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-23 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 3b47aa11e955022d04e7a516421f950fd7329cb5 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 6d29c7e53684c..b1d0f1bf950e9 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1807,6 +1807,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-23 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From 3b47aa11e955022d04e7a516421f950fd7329cb5 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 6d29c7e53684c..b1d0f1bf950e9 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1807,6 +1807,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-18 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From ae2f14cf2b77efa7fe2405f25821095fe9400ebc Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 cb7a42fc7977c..35c0af00670a5 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1803,6 +1803,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-18 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From ae2f14cf2b77efa7fe2405f25821095fe9400ebc Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 cb7a42fc7977c..35c0af00670a5 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1803,6 +1803,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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

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 
Date: Mon, 9 Mar 2026 09:22:33 +
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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

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 
Date: Mon, 9 Mar 2026 09:22:33 +
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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From e60dd7f1eb3e75ffddc9caafc2d78430ee73f98b Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 8beefedef5262..5918e6576754f 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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From e60dd7f1eb3e75ffddc9caafc2d78430ee73f98b Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 8beefedef5262..5918e6576754f 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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From c8492dfd98847650c07f1c0ef960b9fd57cab3b2 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 e149657ae29d5..392cb4d19c1a8 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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-10 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From c8492dfd98847650c07f1c0ef960b9fd57cab3b2 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
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 e149657ae29d5..392cb4d19c1a8 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: {{.*}}


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-09 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From d140ee5e8872dc7bff31fa79a66aad6059a6c0c3 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
Subject: [PATCH] [DA] Add nsw check for addrecs in the Weak Zero SIV tests

---
 llvm/lib/Analysis/DependenceAnalysis.cpp  | 3 +++
 .../DependenceAnalysis/weak-zero-siv-addrec-wrap.ll   | 8 
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp 
b/llvm/lib/Analysis/DependenceAnalysis.cpp
index ed0a19b3332fd..9326534e954bd 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 fe571b2b7f334..0235acb8482ae 100644
--- a/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
@@ -28,13 +28,13 @@ define void @weak_zero_src_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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 - none!
+; 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 [*]!
 ;
@@ -84,7 +84,7 @@ exit:
 define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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
@@ -94,7 +94,7 @@ define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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]!
 ;

___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-09 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/185579

>From d140ee5e8872dc7bff31fa79a66aad6059a6c0c3 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
Subject: [PATCH] [DA] Add nsw check for addrecs in the Weak Zero SIV tests

---
 llvm/lib/Analysis/DependenceAnalysis.cpp  | 3 +++
 .../DependenceAnalysis/weak-zero-siv-addrec-wrap.ll   | 8 
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp 
b/llvm/lib/Analysis/DependenceAnalysis.cpp
index ed0a19b3332fd..9326534e954bd 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 fe571b2b7f334..0235acb8482ae 100644
--- a/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
@@ -28,13 +28,13 @@ define void @weak_zero_src_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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 - none!
+; 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 [*]!
 ;
@@ -84,7 +84,7 @@ exit:
 define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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
@@ -94,7 +94,7 @@ define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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]!
 ;

___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-09 Thread Ryotaro Kasuga via llvm-branch-commits

kasuga-fj wrote:

> [!WARNING]
> This pull request is not mergeable via GitHub because a downstack PR is 
> open. Once all requirements are satisfied, merge this PR as a stack  href="https://app.graphite.com/github/pr/llvm/llvm-project/185579?utm_source=stack-comment-downstack-mergeability-warning";
>  >on Graphite.
> https://graphite.dev/docs/merge-pull-requests";>Learn more

* **#185580** https://app.graphite.com/github/pr/llvm/llvm-project/185580?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#185579** https://app.graphite.com/github/pr/llvm/llvm-project/185579?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/> 👈 https://app.graphite.com/github/pr/llvm/llvm-project/185579?utm_source=stack-comment-view-in-graphite";
 target="_blank">(View in Graphite)
* **#185578** https://app.graphite.com/github/pr/llvm/llvm-project/185578?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#185577** https://app.graphite.com/github/pr/llvm/llvm-project/185577?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#185576** https://app.graphite.com/github/pr/llvm/llvm-project/185576?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#183738** https://app.graphite.com/github/pr/llvm/llvm-project/183738?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#183737** https://app.graphite.com/github/pr/llvm/llvm-project/183737?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#183736** https://app.graphite.com/github/pr/llvm/llvm-project/183736?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* **#183735** https://app.graphite.com/github/pr/llvm/llvm-project/183735?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* `main`




This stack of pull requests is managed by https://graphite.dev?utm-source=stack-comment";>Graphite. Learn 
more about https://stacking.dev/?utm_source=stack-comment";>stacking.


https://github.com/llvm/llvm-project/pull/185579
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] [DA] Add nsw check for addrecs in the Weak Zero SIV tests (PR #185579)

2026-03-09 Thread Ryotaro Kasuga via llvm-branch-commits

https://github.com/kasuga-fj created 
https://github.com/llvm/llvm-project/pull/185579

None

>From ff10dc3d4d947e239c011fd5644fc77f35655322 Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga 
Date: Mon, 9 Mar 2026 09:22:33 +
Subject: [PATCH] [DA] Add nsw check for addrecs in the Weak Zero SIV tests

---
 llvm/lib/Analysis/DependenceAnalysis.cpp  | 3 +++
 .../DependenceAnalysis/weak-zero-siv-addrec-wrap.ll   | 8 
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp 
b/llvm/lib/Analysis/DependenceAnalysis.cpp
index fd5e99a8854df..76e1ee324c370 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 fe571b2b7f334..0235acb8482ae 100644
--- a/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/weak-zero-siv-addrec-wrap.ll
@@ -28,13 +28,13 @@ define void @weak_zero_src_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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 - none!
+; 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 [*]!
 ;
@@ -84,7 +84,7 @@ exit:
 define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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
@@ -94,7 +94,7 @@ define void @weak_zero_dst_siv_addrec_wrap(ptr %A, i64 %n) {
 ; 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 - none!
+; 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]!
 ;

___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits