[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.
This commit is contained in:
Joseph Huber 2022-01-31 18:58:35 -05:00
parent 7a836ba3c5
commit 4a780aa13e
2 changed files with 33 additions and 2 deletions

View File

@ -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 =

View File

@ -11,7 +11,6 @@ add_llvm_component_library(LLVMBitWriter
Analysis
Core
MC
TransformUtils
Object
Support
)