[llvm] [LoopInterchange] Make the entries of the Dependency Matrix unique (PR #116195)
Sjoerd Meijer via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 14 02:04:43 PST 2024
https://github.com/sjoerdmeijer created https://github.com/llvm/llvm-project/pull/116195
The entries in the dependency matrix can contain a lot of duplicates, which is unnecessary and results in more checks that we can avoid, and this patch adds that.
I haven't added tests because the printing of the dependency matrix is guarded by an #ifdef DUMP_DEP_MATRICES so cannot be printed in normal builds. But all existing regression tests are passing, so this is tested in that way.
>From a177bc011f6c2d5c7c40ff5c04152bde330c3d43 Mon Sep 17 00:00:00 2001
From: Sjoerd Meijer <smeijer at nvidia.com>
Date: Thu, 14 Nov 2024 01:53:44 -0800
Subject: [PATCH] [loop-interchange] Make the entries of the Dependency Matrix
unique
The entries in the dependency matrix can contain a lot of duplicates,
which is unnecessary and results in more checks that we can avoid, and
this patch does that.
I haven't added tests because the printing of the dependency matrix is
guarded by and #ifdef DUMP_DEP_MATRICES so cannot be printed in normal
builds. But all existing regression tests are passing, so is tested in
that way.
---
llvm/lib/Transforms/Scalar/LoopInterchange.cpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Scalar/LoopInterchange.cpp b/llvm/lib/Transforms/Scalar/LoopInterchange.cpp
index db63bda1e6b926..703be2fb7ad39b 100644
--- a/llvm/lib/Transforms/Scalar/LoopInterchange.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopInterchange.cpp
@@ -43,6 +43,7 @@
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include <cassert>
+#include <unordered_set>
#include <utility>
#include <vector>
@@ -110,6 +111,7 @@ static bool populateDependencyMatrix(CharMatrix &DepMatrix, unsigned Level,
<< " Loads and Stores to analyze\n");
ValueVector::iterator I, IE, J, JE;
+ std::unordered_set<std::string> UniqueDepEntries;
for (I = MemInstr.begin(), IE = MemInstr.end(); I != IE; ++I) {
for (J = I, JE = MemInstr.end(); J != JE; ++J) {
@@ -156,7 +158,13 @@ static bool populateDependencyMatrix(CharMatrix &DepMatrix, unsigned Level,
Dep.push_back('I');
}
- DepMatrix.push_back(Dep);
+ // Make sure we only add unique entries to the dependency matrix.
+ std::string Hash = std::string(Dep.begin(), Dep.end());
+ if (UniqueDepEntries.find(Hash) == UniqueDepEntries.end() ) {
+ UniqueDepEntries.insert(Hash);
+ DepMatrix.push_back(Dep);
+ }
+
if (DepMatrix.size() > MaxMemInstrCount) {
LLVM_DEBUG(dbgs() << "Cannot handle more than " << MaxMemInstrCount
<< " dependencies inside loop\n");
More information about the llvm-commits
mailing list