[llvm-branch-commits] [llvm] [DA] Extract negating dependence logic (NFCI) (PR #185576)
Ryotaro Kasuga via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Mar 10 23:18:04 PDT 2026
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 <kasuga.ryotaro at fujitsu.com>
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;
More information about the llvm-branch-commits
mailing list