diff options
author | Joseph Huber <jhuber6@vols.utk.edu> | 2022-01-31 18:58:35 -0500 |
---|---|---|
committer | Joseph Huber <jhuber6@vols.utk.edu> | 2022-01-31 19:01:08 -0500 |
commit | 4a780aa13ee5e1c8268de54ef946200a270127b9 (patch) | |
tree | f835282d6f499ed05d63813f231291661d11f019 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
parent | 7a836ba3c5f2bdbd8b802a205f21b477ef91963d (diff) | |
download | llvm-4a780aa13ee5e1c8268de54ef946200a270127b9.zip llvm-4a780aa13ee5e1c8268de54ef946200a270127b9.tar.gz llvm-4a780aa13ee5e1c8268de54ef946200a270127b9.tar.bz2 |
[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.
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index fafccb4d..7ebe10e 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 = |