-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[SandboxVec][DAG][NFC] Refactor setNextNode() and setPrevNode() #122363
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-llvm-transforms Author: vporpo (vporpo) ChangesThis patch updates DAG's Full diff: https://github.com/llvm/llvm-project/pull/122363.diff 2 Files Affected:
diff --git a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
index f423e1ee456cd1..00b53b42e2e572 100644
--- a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
+++ b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
@@ -216,9 +216,18 @@ class MemDGNode final : public DGNode {
/// Memory predecessors.
DenseSet<MemDGNode *> MemPreds;
friend class PredIterator; // For MemPreds.
-
- void setNextNode(MemDGNode *N) { NextMemN = N; }
- void setPrevNode(MemDGNode *N) { PrevMemN = N; }
+ /// Creates both edges: this<->N.
+ void setNextNode(MemDGNode *N) {
+ NextMemN = N;
+ if (NextMemN != nullptr)
+ NextMemN->PrevMemN = this;
+ }
+ /// Creates both edges: N<->this.
+ void setPrevNode(MemDGNode *N) {
+ PrevMemN = N;
+ if (PrevMemN != nullptr)
+ PrevMemN->NextMemN = this;
+ }
friend class DependencyGraph; // For setNextNode(), setPrevNode().
void detachFromChain() {
if (PrevMemN != nullptr)
diff --git a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
index ba62c45a4e704e..c1a046a157d3b2 100644
--- a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+++ b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
@@ -283,8 +283,6 @@ void DependencyGraph::createNewNodes(const Interval<Instruction> &NewInterval) {
// Build the Mem node chain.
if (auto *MemN = dyn_cast<MemDGNode>(N)) {
MemN->setPrevNode(LastMemN);
- if (LastMemN != nullptr)
- LastMemN->setNextNode(MemN);
LastMemN = MemN;
}
}
@@ -302,7 +300,6 @@ void DependencyGraph::createNewNodes(const Interval<Instruction> &NewInterval) {
"Wrong order!");
if (LinkTopN != nullptr && LinkBotN != nullptr) {
LinkTopN->setNextNode(LinkBotN);
- LinkBotN->setPrevNode(LinkTopN);
}
#ifndef NDEBUG
// TODO: Remove this once we've done enough testing.
@@ -394,22 +391,14 @@ void DependencyGraph::notifyMoveInstr(Instruction *I, const BBIterator &To) {
if (To != BB->end()) {
DGNode *ToN = getNodeOrNull(&*To);
if (ToN != nullptr) {
- MemDGNode *PrevMemN = getMemDGNodeBefore(ToN, /*IncludingN=*/false);
- MemDGNode *NextMemN = getMemDGNodeAfter(ToN, /*IncludingN=*/true);
- MemN->PrevMemN = PrevMemN;
- if (PrevMemN != nullptr)
- PrevMemN->NextMemN = MemN;
- MemN->NextMemN = NextMemN;
- if (NextMemN != nullptr)
- NextMemN->PrevMemN = MemN;
+ MemN->setPrevNode(getMemDGNodeBefore(ToN, /*IncludingN=*/false));
+ MemN->setNextNode(getMemDGNodeAfter(ToN, /*IncludingN=*/true));
}
} else {
// MemN becomes the last instruction in the BB.
auto *TermN = getNodeOrNull(BB->getTerminator());
if (TermN != nullptr) {
- MemDGNode *PrevMemN = getMemDGNodeBefore(TermN, /*IncludingN=*/false);
- PrevMemN->NextMemN = MemN;
- MemN->PrevMemN = PrevMemN;
+ MemN->setPrevNode(getMemDGNodeBefore(TermN, /*IncludingN=*/false));
} else {
// The terminator is outside the DAG interval so do nothing.
}
|
|
@llvm/pr-subscribers-vectorizers Author: vporpo (vporpo) ChangesThis patch updates DAG's Full diff: https://github.com/llvm/llvm-project/pull/122363.diff 2 Files Affected:
diff --git a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
index f423e1ee456cd1..00b53b42e2e572 100644
--- a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
+++ b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h
@@ -216,9 +216,18 @@ class MemDGNode final : public DGNode {
/// Memory predecessors.
DenseSet<MemDGNode *> MemPreds;
friend class PredIterator; // For MemPreds.
-
- void setNextNode(MemDGNode *N) { NextMemN = N; }
- void setPrevNode(MemDGNode *N) { PrevMemN = N; }
+ /// Creates both edges: this<->N.
+ void setNextNode(MemDGNode *N) {
+ NextMemN = N;
+ if (NextMemN != nullptr)
+ NextMemN->PrevMemN = this;
+ }
+ /// Creates both edges: N<->this.
+ void setPrevNode(MemDGNode *N) {
+ PrevMemN = N;
+ if (PrevMemN != nullptr)
+ PrevMemN->NextMemN = this;
+ }
friend class DependencyGraph; // For setNextNode(), setPrevNode().
void detachFromChain() {
if (PrevMemN != nullptr)
diff --git a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
index ba62c45a4e704e..c1a046a157d3b2 100644
--- a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+++ b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
@@ -283,8 +283,6 @@ void DependencyGraph::createNewNodes(const Interval<Instruction> &NewInterval) {
// Build the Mem node chain.
if (auto *MemN = dyn_cast<MemDGNode>(N)) {
MemN->setPrevNode(LastMemN);
- if (LastMemN != nullptr)
- LastMemN->setNextNode(MemN);
LastMemN = MemN;
}
}
@@ -302,7 +300,6 @@ void DependencyGraph::createNewNodes(const Interval<Instruction> &NewInterval) {
"Wrong order!");
if (LinkTopN != nullptr && LinkBotN != nullptr) {
LinkTopN->setNextNode(LinkBotN);
- LinkBotN->setPrevNode(LinkTopN);
}
#ifndef NDEBUG
// TODO: Remove this once we've done enough testing.
@@ -394,22 +391,14 @@ void DependencyGraph::notifyMoveInstr(Instruction *I, const BBIterator &To) {
if (To != BB->end()) {
DGNode *ToN = getNodeOrNull(&*To);
if (ToN != nullptr) {
- MemDGNode *PrevMemN = getMemDGNodeBefore(ToN, /*IncludingN=*/false);
- MemDGNode *NextMemN = getMemDGNodeAfter(ToN, /*IncludingN=*/true);
- MemN->PrevMemN = PrevMemN;
- if (PrevMemN != nullptr)
- PrevMemN->NextMemN = MemN;
- MemN->NextMemN = NextMemN;
- if (NextMemN != nullptr)
- NextMemN->PrevMemN = MemN;
+ MemN->setPrevNode(getMemDGNodeBefore(ToN, /*IncludingN=*/false));
+ MemN->setNextNode(getMemDGNodeAfter(ToN, /*IncludingN=*/true));
}
} else {
// MemN becomes the last instruction in the BB.
auto *TermN = getNodeOrNull(BB->getTerminator());
if (TermN != nullptr) {
- MemDGNode *PrevMemN = getMemDGNodeBefore(TermN, /*IncludingN=*/false);
- PrevMemN->NextMemN = MemN;
- MemN->PrevMemN = PrevMemN;
+ MemN->setPrevNode(getMemDGNodeBefore(TermN, /*IncludingN=*/false));
} else {
// The terminator is outside the DAG interval so do nothing.
}
|
…#122363) This patch updates DAG's `setNextNode()` and `setPrevNode()` to update both nodes of the link.
This patch updates DAG's
setNextNode()andsetPrevNode()to update both nodes of the link.