[llvm] [llvm] Add NCD search on Array of basic blocks (PR #119355)
Elizaveta Noskova via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 16 04:43:40 PST 2025
https://github.com/enoskova-sc updated https://github.com/llvm/llvm-project/pull/119355
>From 1077335f63a7a1394ec29d5e63d3777dfb693353 Mon Sep 17 00:00:00 2001
From: ens-sc <elizaveta.noskova at syntacore.com>
Date: Wed, 11 Dec 2024 12:40:41 +0300
Subject: [PATCH] [llvm] Add NCD search on Array of basic blocks
---
llvm/include/llvm/Support/GenericDomTree.h | 16 ++++++++++++++++
llvm/lib/CodeGen/ShrinkWrap.cpp | 7 +------
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/llvm/include/llvm/Support/GenericDomTree.h b/llvm/include/llvm/Support/GenericDomTree.h
index a4a680c97a0794..d3f789dd002691 100644
--- a/llvm/include/llvm/Support/GenericDomTree.h
+++ b/llvm/include/llvm/Support/GenericDomTree.h
@@ -558,6 +558,22 @@ class DominatorTreeBase {
return isPostDominator() && !A->getBlock();
}
+ template <typename IteratorTy>
+ NodeT *findNearestCommonDominator(iterator_range<IteratorTy> Nodes) const {
+ assert(!Nodes.empty() && "Nodes list is empty!");
+
+ NodeT *NCD = *Nodes.begin();
+ for (NodeT *Node : llvm::drop_begin(Nodes)) {
+ NCD = findNearestCommonDominator(NCD, Node);
+
+ // Stop when the root is reached.
+ if (isVirtualRoot(getNode(NCD)))
+ return nullptr;
+ }
+
+ return NCD;
+ }
+
//===--------------------------------------------------------------------===//
// API to update (Post)DominatorTree information based on modifications to
// the CFG...
diff --git a/llvm/lib/CodeGen/ShrinkWrap.cpp b/llvm/lib/CodeGen/ShrinkWrap.cpp
index 5029f45def2266..fa57eb30fac439 100644
--- a/llvm/lib/CodeGen/ShrinkWrap.cpp
+++ b/llvm/lib/CodeGen/ShrinkWrap.cpp
@@ -375,12 +375,7 @@ bool ShrinkWrap::useOrDefCSROrFI(const MachineInstr &MI, RegScavenger *RS,
template <typename ListOfBBs, typename DominanceAnalysis>
static MachineBasicBlock *FindIDom(MachineBasicBlock &Block, ListOfBBs BBs,
DominanceAnalysis &Dom, bool Strict = true) {
- MachineBasicBlock *IDom = &Block;
- for (MachineBasicBlock *BB : BBs) {
- IDom = Dom.findNearestCommonDominator(IDom, BB);
- if (!IDom)
- break;
- }
+ MachineBasicBlock *IDom = Dom.findNearestCommonDominator(iterator_range(BBs));
if (Strict && IDom == &Block)
return nullptr;
return IDom;
More information about the llvm-commits
mailing list