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 <[email protected]> Date: Mon, 9 Mar 2026 09:22:33 +0000 Subject: [PATCH] [DA] Add nsw check for addrecs in the Weak Zero SIV tests --- llvm/lib/Analysis/DependenceAnalysis.cpp | 3 ++ .../weak-zero-siv-addrec-wrap.ll | 47 ++++++++++++------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp index 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 mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
