forked from OSchip/llvm-project
[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:
parent
7a836ba3c5
commit
4a780aa13e
|
@ -69,7 +69,6 @@
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
#include "llvm/Support/SHA1.h"
|
#include "llvm/Support/SHA1.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include "llvm/Transforms/Utils/ModuleUtils.h"
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
@ -4975,6 +4974,39 @@ void llvm::EmbedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
|
||||||
NewUsed->setSection("llvm.metadata");
|
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,
|
void llvm::EmbedBufferInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
|
||||||
StringRef SectionName) {
|
StringRef SectionName) {
|
||||||
ArrayRef<char> ModuleData =
|
ArrayRef<char> ModuleData =
|
||||||
|
|
|
@ -11,7 +11,6 @@ add_llvm_component_library(LLVMBitWriter
|
||||||
Analysis
|
Analysis
|
||||||
Core
|
Core
|
||||||
MC
|
MC
|
||||||
TransformUtils
|
|
||||||
Object
|
Object
|
||||||
Support
|
Support
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue