https://github.com/kasuga-fj updated https://github.com/llvm/llvm-project/pull/185576
>From 54ae64821581d843554f8b67b1ee48b5f9b29000 Mon Sep 17 00:00:00 2001 From: Ryotaro Kasuga <[email protected]> Date: Mon, 9 Mar 2026 13:18:21 +0000 Subject: [PATCH] [DA] Extract reversing dependence logic (NFCI) --- llvm/include/llvm/Analysis/DependenceAnalysis.h | 6 ++++++ llvm/lib/Analysis/DependenceAnalysis.cpp | 17 ++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/llvm/include/llvm/Analysis/DependenceAnalysis.h b/llvm/include/llvm/Analysis/DependenceAnalysis.h index 26589571a65e2..8adaf13dd5524 100644 --- a/llvm/include/llvm/Analysis/DependenceAnalysis.h +++ b/llvm/include/llvm/Analysis/DependenceAnalysis.h @@ -169,6 +169,10 @@ class LLVM_ABI Dependence { /// vector means Src and Dst are reversed in the actual program. virtual bool isDirectionNegative() const { return false; } + /// Negate the dependence by swapping the source and destination, and + /// reversing the direction and distance information. + virtual void negate(ScalarEvolution &SE) {} + /// If the direction vector is negative, normalize the direction /// vector to make it non-negative. Normalization is done by reversing /// Src and Dst, plus reversing the dependence directions and distances @@ -275,6 +279,8 @@ class LLVM_ABI FullDependence final : public Dependence { /// vector means Src and Dst are reversed in the actual program. bool isDirectionNegative() const override; + void negate(ScalarEvolution &SE) override; + /// If the direction vector is negative, normalize the direction /// vector to make it non-negative. Normalization is done by reversing /// Src and Dst, plus reversing the dependence directions and distances diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp index 36d60d13c81ca..0b8666a27d349 100644 --- a/llvm/lib/Analysis/DependenceAnalysis.cpp +++ b/llvm/lib/Analysis/DependenceAnalysis.cpp @@ -623,12 +623,7 @@ bool FullDependence::isDirectionNegative() const { return false; } -bool FullDependence::normalize(ScalarEvolution *SE) { - if (!isDirectionNegative()) - return false; - - LLVM_DEBUG(dbgs() << "Before normalizing negative direction vectors:\n"; - dump(dbgs());); +void FullDependence::negate(ScalarEvolution &SE) { std::swap(Src, Dst); for (unsigned Level = 1; Level <= Levels; ++Level) { unsigned char Direction = DV[Level - 1].Direction; @@ -642,9 +637,17 @@ bool FullDependence::normalize(ScalarEvolution *SE) { DV[Level - 1].Direction = RevDirection; // Reverse the dependence distance as well. if (DV[Level - 1].Distance != nullptr) - DV[Level - 1].Distance = SE->getNegativeSCEV(DV[Level - 1].Distance); + DV[Level - 1].Distance = SE.getNegativeSCEV(DV[Level - 1].Distance); } +} +bool FullDependence::normalize(ScalarEvolution *SE) { + if (!isDirectionNegative()) + return false; + + LLVM_DEBUG(dbgs() << "Before normalizing negative direction vectors:\n"; + dump(dbgs());); + negate(*SE); LLVM_DEBUG(dbgs() << "After normalizing negative direction vectors:\n"; dump(dbgs());); return true; _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
