[llvm] 4a780aa - [LLVM] Resolve layer violation in BitcodeWriter

Joseph Huber via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 31 16:01:32 PST 2022


Author: Joseph Huber
Date: 2022-01-31T19:01:08-05:00
New Revision: 4a780aa13ee5e1c8268de54ef946200a270127b9

URL: https://github.com/llvm/llvm-project/commit/4a780aa13ee5e1c8268de54ef946200a270127b9
DIFF: https://github.com/llvm/llvm-project/commit/4a780aa13ee5e1c8268de54ef946200a270127b9.diff

LOG: [LLVM] Resolve layer violation in BitcodeWriter

Summary:
The changes introduced in D116542 added a dependency on TransformUtils
to use the `appendToCompilerUsed` method. This created a circular
dependency. This patch simply copies the needed function locally to
remove the dependency.

Added: 
    

Modified: 
    llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/lib/Bitcode/Writer/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index fafccb4d42547..7ebe10e9b4455 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -69,7 +69,6 @@
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/SHA1.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/Transforms/Utils/ModuleUtils.h"
 #include <algorithm>
 #include <cassert>
 #include <cstddef>
@@ -4975,6 +4974,39 @@ void llvm::EmbedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
   NewUsed->setSection("llvm.metadata");
 }
 
+static void appendToCompilerUsed(Module &M, ArrayRef<GlobalValue *> Values) {
+  GlobalVariable *GV = M.getGlobalVariable("llvm.compiler.used");
+  SmallPtrSet<Constant *, 16> InitAsSet;
+  SmallVector<Constant *, 16> Init;
+  if (GV) {
+    if (GV->hasInitializer()) {
+      auto *CA = cast<ConstantArray>(GV->getInitializer());
+      for (auto &Op : CA->operands()) {
+        Constant *C = cast_or_null<Constant>(Op);
+        if (InitAsSet.insert(C).second)
+          Init.push_back(C);
+      }
+    }
+    GV->eraseFromParent();
+  }
+
+  Type *Int8PtrTy = llvm::Type::getInt8PtrTy(M.getContext());
+  for (auto *V : Values) {
+    Constant *C = ConstantExpr::getPointerBitCastOrAddrSpaceCast(V, Int8PtrTy);
+    if (InitAsSet.insert(C).second)
+      Init.push_back(C);
+  }
+
+  if (Init.empty())
+    return;
+
+  ArrayType *ATy = ArrayType::get(Int8PtrTy, Init.size());
+  GV = new llvm::GlobalVariable(M, ATy, false, GlobalValue::AppendingLinkage,
+                                ConstantArray::get(ATy, Init),
+                                "llvm.compiler.used");
+  GV->setSection("llvm.metadata");
+}
+
 void llvm::EmbedBufferInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
                                StringRef SectionName) {
   ArrayRef<char> ModuleData =

diff  --git a/llvm/lib/Bitcode/Writer/CMakeLists.txt b/llvm/lib/Bitcode/Writer/CMakeLists.txt
index dcdb73b854d4c..36808c8ae28f7 100644
--- a/llvm/lib/Bitcode/Writer/CMakeLists.txt
+++ b/llvm/lib/Bitcode/Writer/CMakeLists.txt
@@ -11,7 +11,6 @@ add_llvm_component_library(LLVMBitWriter
   Analysis
   Core
   MC
-  TransformUtils
   Object
   Support
   )


        


More information about the llvm-commits mailing list