mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-25 21:46:50 +00:00
Don't produce an empty llvm.compiler.used in LTO.
LTO was always creating an empty llvm.compiler.used. With this patch we now first check if there is anything to be added first. Unfortunately, there is no good way to test libLTO in isolation as it needs gold or ld64, but there are bots doing LTO builds that found this problem. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180202 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
268adf2a03
commit
d4ee3920c9
@ -287,9 +287,7 @@ static void findUsedValues(GlobalVariable *LLVMUsed,
|
||||
SmallPtrSet<GlobalValue*, 8> &UsedValues) {
|
||||
if (LLVMUsed == 0) return;
|
||||
|
||||
ConstantArray *Inits = dyn_cast<ConstantArray>(LLVMUsed->getInitializer());
|
||||
if (Inits == 0) return;
|
||||
|
||||
ConstantArray *Inits = cast<ConstantArray>(LLVMUsed->getInitializer());
|
||||
for (unsigned i = 0, e = Inits->getNumOperands(); i != e; ++i)
|
||||
if (GlobalValue *GV =
|
||||
dyn_cast<GlobalValue>(Inits->getOperand(i)->stripPointerCasts()))
|
||||
@ -326,24 +324,26 @@ void LTOCodeGenerator::applyScopeRestrictions() {
|
||||
if (LLVMCompilerUsed)
|
||||
LLVMCompilerUsed->eraseFromParent();
|
||||
|
||||
llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(_context);
|
||||
std::vector<Constant*> asmUsed2;
|
||||
for (SmallPtrSet<GlobalValue*, 16>::const_iterator i = asmUsed.begin(),
|
||||
e = asmUsed.end(); i !=e; ++i) {
|
||||
GlobalValue *GV = *i;
|
||||
Constant *c = ConstantExpr::getBitCast(GV, i8PTy);
|
||||
asmUsed2.push_back(c);
|
||||
if (!asmUsed.empty()) {
|
||||
llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(_context);
|
||||
std::vector<Constant*> asmUsed2;
|
||||
for (SmallPtrSet<GlobalValue*, 16>::const_iterator i = asmUsed.begin(),
|
||||
e = asmUsed.end(); i !=e; ++i) {
|
||||
GlobalValue *GV = *i;
|
||||
Constant *c = ConstantExpr::getBitCast(GV, i8PTy);
|
||||
asmUsed2.push_back(c);
|
||||
}
|
||||
|
||||
llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, asmUsed2.size());
|
||||
LLVMCompilerUsed =
|
||||
new llvm::GlobalVariable(*mergedModule, ATy, false,
|
||||
llvm::GlobalValue::AppendingLinkage,
|
||||
llvm::ConstantArray::get(ATy, asmUsed2),
|
||||
"llvm.compiler.used");
|
||||
|
||||
LLVMCompilerUsed->setSection("llvm.metadata");
|
||||
}
|
||||
|
||||
llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, asmUsed2.size());
|
||||
LLVMCompilerUsed =
|
||||
new llvm::GlobalVariable(*mergedModule, ATy, false,
|
||||
llvm::GlobalValue::AppendingLinkage,
|
||||
llvm::ConstantArray::get(ATy, asmUsed2),
|
||||
"llvm.compiler.used");
|
||||
|
||||
LLVMCompilerUsed->setSection("llvm.metadata");
|
||||
|
||||
passes.add(createInternalizePass(mustPreserveList));
|
||||
|
||||
// apply scope restrictions
|
||||
|
Loading…
Reference in New Issue
Block a user