[llvm] 6e2e06f - [DA] Refactor the signature of the Exact RDIV test (NFCI) (#189535)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 01:20:11 PDT 2026
Author: Ruoyu Qiu
Date: 2026-03-31T08:20:06Z
New Revision: 6e2e06f98e164be53528ac19c7a307e92caa53eb
URL: https://github.com/llvm/llvm-project/commit/6e2e06f98e164be53528ac19c7a307e92caa53eb
DIFF: https://github.com/llvm/llvm-project/commit/6e2e06f98e164be53528ac19c7a307e92caa53eb.diff
LOG: [DA] Refactor the signature of the Exact RDIV test (NFCI) (#189535)
Added:
Modified:
llvm/include/llvm/Analysis/DependenceAnalysis.h
llvm/lib/Analysis/DependenceAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/DependenceAnalysis.h b/llvm/include/llvm/Analysis/DependenceAnalysis.h
index 7ca7dde467085..ac819ec271b07 100644
--- a/llvm/include/llvm/Analysis/DependenceAnalysis.h
+++ b/llvm/include/llvm/Analysis/DependenceAnalysis.h
@@ -583,9 +583,7 @@ class DependenceInfo {
/// Returns true if any possible dependence is disproved.
/// Works in some cases that symbolicRDIVtest doesn't,
/// and vice versa.
- bool exactRDIVtest(const SCEV *SrcCoeff, const SCEV *DstCoeff,
- const SCEV *SrcConst, const SCEV *DstConst,
- const Loop *SrcLoop, const Loop *DstLoop,
+ bool exactRDIVtest(const SCEVAddRecExpr *Src, const SCEVAddRecExpr *Dst,
FullDependence &Result) const;
/// gcdMIVtest - Tests an MIV subscript pair for dependence.
diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp
index c9371f39c0e18..1734983569a8f 100644
--- a/llvm/lib/Analysis/DependenceAnalysis.cpp
+++ b/llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -1937,13 +1937,16 @@ bool DependenceInfo::weakZeroDstSIVtest(const SCEVAddRecExpr *Src,
// and a and b are constants.
// Returns true if any possible dependence is disproved.
// Works in some cases that symbolicRDIVtest doesn't, and vice versa.
-bool DependenceInfo::exactRDIVtest(const SCEV *SrcCoeff, const SCEV *DstCoeff,
- const SCEV *SrcConst, const SCEV *DstConst,
- const Loop *SrcLoop, const Loop *DstLoop,
+bool DependenceInfo::exactRDIVtest(const SCEVAddRecExpr *Src,
+ const SCEVAddRecExpr *Dst,
FullDependence &Result) const {
if (!isDependenceTestEnabled(DependenceTestType::ExactRDIV))
return false;
+ const SCEV *SrcCoeff = Src->getStepRecurrence(*SE);
+ const SCEV *SrcConst = Src->getStart();
+ const SCEV *DstCoeff = Dst->getStepRecurrence(*SE);
+ const SCEV *DstConst = Dst->getStart();
LLVM_DEBUG(dbgs() << "\tExact RDIV test\n");
LLVM_DEBUG(dbgs() << "\t SrcCoeff = " << *SrcCoeff << " = AM\n");
LLVM_DEBUG(dbgs() << "\t DstCoeff = " << *DstCoeff << " = BM\n");
@@ -1974,12 +1977,12 @@ bool DependenceInfo::exactRDIVtest(const SCEV *SrcCoeff, const SCEV *DstCoeff,
// since SCEV construction seems to normalize, LM = 0
std::optional<APInt> SrcUM =
- collectNonNegativeConstantUpperBound(SrcLoop, Delta->getType());
+ collectNonNegativeConstantUpperBound(Src->getLoop(), Delta->getType());
if (SrcUM)
LLVM_DEBUG(dbgs() << "\t SrcUM = " << *SrcUM << "\n");
std::optional<APInt> DstUM =
- collectNonNegativeConstantUpperBound(DstLoop, Delta->getType());
+ collectNonNegativeConstantUpperBound(Dst->getLoop(), Delta->getType());
if (DstUM)
LLVM_DEBUG(dbgs() << "\t DstUM = " << *DstUM << "\n");
@@ -2095,25 +2098,12 @@ bool DependenceInfo::testSIV(const SCEV *Src, const SCEV *Dst, unsigned &Level,
// Return true if dependence disproved.
bool DependenceInfo::testRDIV(const SCEV *Src, const SCEV *Dst,
FullDependence &Result) const {
- const SCEV *SrcConst, *DstConst;
- const SCEV *SrcCoeff, *DstCoeff;
- const Loop *SrcLoop, *DstLoop;
-
LLVM_DEBUG(dbgs() << " src = " << *Src << "\n");
LLVM_DEBUG(dbgs() << " dst = " << *Dst << "\n");
const SCEVAddRecExpr *SrcAddRec = dyn_cast<SCEVAddRecExpr>(Src);
const SCEVAddRecExpr *DstAddRec = dyn_cast<SCEVAddRecExpr>(Dst);
- if (SrcAddRec && DstAddRec) {
- SrcConst = SrcAddRec->getStart();
- SrcCoeff = SrcAddRec->getStepRecurrence(*SE);
- SrcLoop = SrcAddRec->getLoop();
- DstConst = DstAddRec->getStart();
- DstCoeff = DstAddRec->getStepRecurrence(*SE);
- DstLoop = DstAddRec->getLoop();
- } else
- llvm_unreachable("RDIV expected at least one AddRec");
- return exactRDIVtest(SrcCoeff, DstCoeff, SrcConst, DstConst, SrcLoop, DstLoop,
- Result) ||
+ assert(SrcAddRec && DstAddRec && "Unexpected non-addrec input");
+ return exactRDIVtest(SrcAddRec, DstAddRec, Result) ||
gcdMIVtest(Src, Dst, Result);
}
More information about the llvm-commits
mailing list