[llvm] llvm: Export EliminateNewDuplicatePHINodes (PR #169564)

Fabrice de Gans via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 8 10:16:05 PST 2025


https://github.com/Steelskin updated https://github.com/llvm/llvm-project/pull/169564

>From 71e98ff79e1834bd8c8084760fbf4ef268ac54dd Mon Sep 17 00:00:00 2001
From: Fabroce de Gans <fabrice at thebrowser.company>
Date: Tue, 25 Nov 2025 15:13:55 -0500
Subject: [PATCH] llvm: Export EliminateNewDuplicatePHINodes

This is needed for tests, when building with
`LLVM_BUILD_LLVM_DYLIB` so LLVM can be built as a DLL on Windows.

This effort is tracked in #109483.
---
 llvm/include/llvm/Transforms/Utils/SSAUpdaterBulk.h    | 6 +++++-
 llvm/lib/Transforms/Utils/SSAUpdaterBulk.cpp           | 4 ++++
 llvm/unittests/Transforms/Utils/SSAUpdaterBulkTest.cpp | 3 ---
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/llvm/include/llvm/Transforms/Utils/SSAUpdaterBulk.h b/llvm/include/llvm/Transforms/Utils/SSAUpdaterBulk.h
index a1a2cac76bde8..a489daa8035ee 100644
--- a/llvm/include/llvm/Transforms/Utils/SSAUpdaterBulk.h
+++ b/llvm/include/llvm/Transforms/Utils/SSAUpdaterBulk.h
@@ -14,12 +14,12 @@
 #define LLVM_TRANSFORMS_UTILS_SSAUPDATERBULK_H
 
 #include "llvm/ADT/StringRef.h"
+#include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/PredIteratorCache.h"
 #include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-class BasicBlock;
 class PHINode;
 template <typename T> class SmallVectorImpl;
 class Type;
@@ -84,6 +84,10 @@ class SSAUpdaterBulk {
   LLVM_ABI_FOR_TEST void RewriteAndOptimizeAllUses(DominatorTree &DT);
 };
 
+LLVM_ABI_FOR_TEST bool
+EliminateNewDuplicatePHINodes(BasicBlock *BB,
+                              BasicBlock::phi_iterator FirstExistingPN);
+
 } // end namespace llvm
 
 #endif // LLVM_TRANSFORMS_UTILS_SSAUPDATERBULK_H
diff --git a/llvm/lib/Transforms/Utils/SSAUpdaterBulk.cpp b/llvm/lib/Transforms/Utils/SSAUpdaterBulk.cpp
index fb39fddde72e2..c5bd0567d8d66 100644
--- a/llvm/lib/Transforms/Utils/SSAUpdaterBulk.cpp
+++ b/llvm/lib/Transforms/Utils/SSAUpdaterBulk.cpp
@@ -267,6 +267,8 @@ static bool replaceIfIdentical(PHINode &PHI, PHINode &ReplPHI) {
   return true;
 }
 
+namespace llvm {
+
 bool EliminateNewDuplicatePHINodes(BasicBlock *BB,
                                    BasicBlock::phi_iterator FirstExistingPN) {
   assert(!PHIAreRefEachOther(make_range(BB->phis().begin(), FirstExistingPN)));
@@ -293,6 +295,8 @@ bool EliminateNewDuplicatePHINodes(BasicBlock *BB,
   return Changed;
 }
 
+} // end namespace llvm
+
 static void deduplicatePass(ArrayRef<PHINode *> Worklist) {
   SmallDenseMap<BasicBlock *, unsigned> BBs;
   for (PHINode *PHI : Worklist) {
diff --git a/llvm/unittests/Transforms/Utils/SSAUpdaterBulkTest.cpp b/llvm/unittests/Transforms/Utils/SSAUpdaterBulkTest.cpp
index 13cfaf3a0345e..503d3a0f9bfa9 100644
--- a/llvm/unittests/Transforms/Utils/SSAUpdaterBulkTest.cpp
+++ b/llvm/unittests/Transforms/Utils/SSAUpdaterBulkTest.cpp
@@ -374,9 +374,6 @@ TEST(SSAUpdaterBulk, SimplifyPHIs) {
   EXPECT_EQ(Phi, Cmp->getOperand(1));
 }
 
-bool EliminateNewDuplicatePHINodes(BasicBlock *BB,
-                                   BasicBlock::phi_iterator FirstExistingPN);
-
 // Helper to run both versions on the same input.
 static void RunEliminateNewDuplicatePHINode(
     const char *AsmText,



More information about the llvm-commits mailing list