[llvm-branch-commits] [llvm] [DA] Remove calls to the GCD MIV test from `testSIV` (PR #186388)

Ryotaro Kasuga via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Mar 13 06:07:11 PDT 2026


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

None

>From e1a7b57e2b17a2be7fb2fa98e9b88add537f7afc Mon Sep 17 00:00:00 2001
From: Ryotaro Kasuga <kasuga.ryotaro at fujitsu.com>
Date: Fri, 13 Mar 2026 10:36:45 +0000
Subject: [PATCH] [DA] Remove calls to the GCD MIV test from `testSIV`

---
 llvm/lib/Analysis/DependenceAnalysis.cpp      | 10 ++-----
 .../exact-siv-addrec-wrap.ll                  | 28 ++++++-------------
 .../DependenceAnalysis/exact-siv-overflow.ll  |  4 +--
 .../infer_affine_domain_ovlf.ll               | 25 ++++++-----------
 .../run-specific-dependence-test.ll           | 24 ++++++++--------
 .../strong-siv-addrec-wrap.ll                 | 28 ++++++-------------
 6 files changed, 44 insertions(+), 75 deletions(-)

diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp
index 968339fb3db4d..581f4849ae315 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -2303,23 +2303,19 @@ bool DependenceInfo::testSIV(const SCEV *Src, const SCEV *Dst, unsigned &Level,
     else if (SrcCoeff == SE->getNegativeSCEV(DstCoeff))
       disproven = weakCrossingSIVtest(SrcCoeff, SrcConst, DstConst, CurSrcLoop,
                                       CurDstLoop, Level, Result);
-    else
-      disproven = exactSIVtest(SrcAddRec, DstAddRec, Level, Result);
-    return disproven || gcdMIVtest(Src, Dst, Result) ||
+    return disproven || exactSIVtest(SrcAddRec, DstAddRec, Level, Result) ||
            symbolicRDIVtest(SrcCoeff, DstCoeff, SrcConst, DstConst, CurSrcLoop,
                             CurDstLoop);
   }
   if (SrcAddRec) {
     const Loop *CurSrcLoop = SrcAddRec->getLoop();
     Level = mapSrcLoop(CurSrcLoop);
-    return weakZeroDstSIVtest(SrcAddRec, Dst, Level, Result) ||
-           gcdMIVtest(Src, Dst, Result);
+    return weakZeroDstSIVtest(SrcAddRec, Dst, Level, Result);
   }
   if (DstAddRec) {
     const Loop *CurDstLoop = DstAddRec->getLoop();
     Level = mapDstLoop(CurDstLoop);
-    return weakZeroSrcSIVtest(Src, DstAddRec, Level, Result) ||
-           gcdMIVtest(Src, Dst, Result);
+    return weakZeroSrcSIVtest(Src, DstAddRec, Level, Result);
   }
   llvm_unreachable("SIV test expected at least one AddRec");
   return false;
diff --git a/llvm/test/Analysis/DependenceAnalysis/exact-siv-addrec-wrap.ll b/llvm/test/Analysis/DependenceAnalysis/exact-siv-addrec-wrap.ll
index 3a5be74f93091..492063c694606 100644
--- a/llvm/test/Analysis/DependenceAnalysis/exact-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/exact-siv-addrec-wrap.ll
@@ -20,25 +20,14 @@
 ;  A[a*i]        |        | A[14]
 ;  A[5*i + 14]   | A[14]  |
 ;
-; FIXME: DependenceAnalysis fails to detect the dependency between the two
-; stores.
-;
 define void @exact_siv_no_nsw(ptr %A) {
-; CHECK-ALL-LABEL: 'exact_siv_no_nsw'
-; 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 - none!
-;
-; CHECK-EXACT-SIV-LABEL: 'exact_siv_no_nsw'
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-LABEL: 'exact_siv_no_nsw'
+; 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 - output [*|<]!
+; CHECK-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-NEXT:    da analyze - none!
 ;
 entry:
   br label %loop.header
@@ -68,4 +57,5 @@ exit:
   ret void
 }
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}
+; CHECK-ALL: {{.*}}
+; CHECK-EXACT-SIV: {{.*}}
diff --git a/llvm/test/Analysis/DependenceAnalysis/exact-siv-overflow.ll b/llvm/test/Analysis/DependenceAnalysis/exact-siv-overflow.ll
index ba6e0f043b528..7e0b3076e71f4 100644
--- a/llvm/test/Analysis/DependenceAnalysis/exact-siv-overflow.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/exact-siv-overflow.ll
@@ -34,11 +34,11 @@ define void @exactsiv_const_ovfl(ptr %A) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'exactsiv_const_ovfl'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 0, ptr %idx.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 1, ptr %idx.1, align 1
 ; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %idx.1, align 1 --> Dst: store i8 1, ptr %idx.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 entry:
   br label %loop.header
diff --git a/llvm/test/Analysis/DependenceAnalysis/infer_affine_domain_ovlf.ll b/llvm/test/Analysis/DependenceAnalysis/infer_affine_domain_ovlf.ll
index 9e3b5c05ab922..138aab7f5146f 100644
--- a/llvm/test/Analysis/DependenceAnalysis/infer_affine_domain_ovlf.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/infer_affine_domain_ovlf.ll
@@ -17,21 +17,13 @@
 ;  A[2^61*i - 2^63] |        | A[0]
 
 define void @infer_affine_domain_ovfl(ptr %A) {
-; CHECK-ALL-LABEL: 'infer_affine_domain_ovfl'
-; 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:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-ALL-NEXT:    da analyze - output [<>]!
-; 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-EXACT-SIV-LABEL: 'infer_affine_domain_ovfl'
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
-; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-LABEL: 'infer_affine_domain_ovfl'
+; CHECK-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
+; CHECK-NEXT:    da analyze - none!
+; CHECK-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-NEXT:    da analyze - output [*|<]!
+; CHECK-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
+; CHECK-NEXT:    da analyze - none!
 ;
 entry:
   br label %loop.header
@@ -59,4 +51,5 @@ exit:
   ret void
 }
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}
+; CHECK-ALL: {{.*}}
+; CHECK-EXACT-SIV: {{.*}}
diff --git a/llvm/test/Analysis/DependenceAnalysis/run-specific-dependence-test.ll b/llvm/test/Analysis/DependenceAnalysis/run-specific-dependence-test.ll
index 59f60c43fee2b..f44159ee94eb7 100644
--- a/llvm/test/Analysis/DependenceAnalysis/run-specific-dependence-test.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/run-specific-dependence-test.ll
@@ -35,7 +35,7 @@ define void @strong_siv(ptr %a) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'strong_siv'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'strong_siv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 1
@@ -103,11 +103,11 @@ define void @weak_crossing_siv(ptr %a) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'weak_crossing_siv'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
 ; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_crossing_siv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
@@ -198,11 +198,11 @@ define void @exact_siv(ptr %a) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'exact_siv'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'exact_siv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
@@ -232,7 +232,7 @@ define void @exact_siv(ptr %a) {
 ; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
 ; CHECK-GCD-MIV-NEXT:    da analyze - output [*]!
 ; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-GCD-MIV-NEXT:    da analyze - none!
+; CHECK-GCD-MIV-NEXT:    da analyze - output [*|<]!
 ; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
 ; CHECK-GCD-MIV-NEXT:    da analyze - output [*]!
 ;
@@ -298,7 +298,7 @@ define void @weak_zero_siv(ptr %a) {
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
 ; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_zero_siv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
@@ -388,11 +388,11 @@ define void @exact_rdiv(ptr %a) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'exact_rdiv'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
 ; CHECK-EXACT-SIV-NEXT:    da analyze - output [|<]!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'exact_rdiv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
@@ -492,11 +492,11 @@ define void @symbolic_rdiv(ptr %a) {
 ;
 ; CHECK-EXACT-SIV-LABEL: 'symbolic_rdiv'
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
 ; CHECK-EXACT-SIV-NEXT:    da analyze - output [|<]!
 ; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1
-; CHECK-EXACT-SIV-NEXT:    da analyze - output [*]!
+; CHECK-EXACT-SIV-NEXT:    da analyze - none!
 ;
 ; CHECK-WEAK-ZERO-SIV-LABEL: 'symbolic_rdiv'
 ; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1
diff --git a/llvm/test/Analysis/DependenceAnalysis/strong-siv-addrec-wrap.ll b/llvm/test/Analysis/DependenceAnalysis/strong-siv-addrec-wrap.ll
index 721fdeeb31624..8ae5305c3b97b 100644
--- a/llvm/test/Analysis/DependenceAnalysis/strong-siv-addrec-wrap.ll
+++ b/llvm/test/Analysis/DependenceAnalysis/strong-siv-addrec-wrap.ll
@@ -20,25 +20,14 @@
 ;  A[(2^62+1)*i]     |        | A[4]
 ;  A[(2^62+1)*i + 4] | A[4]   |
 ;
-; FIXME: DependenceAnalysis fails to detect the dependency between the two
-; stores.
-;
 define void @strong_siv_no_nsw(ptr %A) {
-; CHECK-ALL-LABEL: 'strong_siv_no_nsw'
-; 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 [*]!
-;
-; CHECK-STRONG-SIV-LABEL: 'strong_siv_no_nsw'
-; CHECK-STRONG-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1
-; CHECK-STRONG-SIV-NEXT:    da analyze - output [*]!
-; CHECK-STRONG-SIV-NEXT:  Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-STRONG-SIV-NEXT:    da analyze - output [*|<]!
-; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1
-; CHECK-STRONG-SIV-NEXT:    da analyze - output [*]!
+; CHECK-LABEL: 'strong_siv_no_nsw'
+; 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 - output [*|<]!
+; 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 [*]!
 ;
 entry:
   br label %loop.header
@@ -75,4 +64,5 @@ exit:
   ret void
 }
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}
+; CHECK-ALL: {{.*}}
+; CHECK-STRONG-SIV: {{.*}}



More information about the llvm-branch-commits mailing list