forked from OSchip/llvm-project
Delete what is now duplicated code.
Having to import an alias as declaration is not thinlto specific. The test difference are because when we already have a decl and we are not importing it, we just leave the decl alone. llvm-svn: 254556
This commit is contained in:
parent
b3757c008b
commit
8c04472edf
|
@ -791,30 +791,6 @@ Function *ModuleLinker::copyFunctionProto(TypeMapTy &TypeMap,
|
|||
/// Set up prototypes for any aliases that come over from the source module.
|
||||
GlobalValue *ModuleLinker::copyGlobalAliasProto(TypeMapTy &TypeMap,
|
||||
const GlobalAlias *SGA) {
|
||||
// If we are importing and encounter a weak_any alias, or an alias to
|
||||
// an object being imported as a declaration, we must import the alias
|
||||
// as a declaration as well, which involves converting it to a non-alias.
|
||||
// See comments in ModuleLinker::getLinkage for why we cannot import
|
||||
// weak_any defintions.
|
||||
if (isPerformingImport() && !doImportAsDefinition(SGA)) {
|
||||
// Need to convert to declaration. All aliases must be definitions.
|
||||
const GlobalValue *GVal = SGA->getBaseObject();
|
||||
GlobalValue *NewGV;
|
||||
if (auto *GVar = dyn_cast<GlobalVariable>(GVal))
|
||||
NewGV = copyGlobalVariableProto(TypeMap, GVar);
|
||||
else {
|
||||
auto *F = dyn_cast<Function>(GVal);
|
||||
assert(F);
|
||||
NewGV = copyFunctionProto(TypeMap, F);
|
||||
}
|
||||
// Set the linkage to External or ExternalWeak (see comments in
|
||||
// ModuleLinker::getLinkage for why WeakAny is converted to ExternalWeak).
|
||||
if (SGA->hasWeakAnyLinkage())
|
||||
NewGV->setLinkage(GlobalValue::ExternalWeakLinkage);
|
||||
else
|
||||
NewGV->setLinkage(GlobalValue::ExternalLinkage);
|
||||
return NewGV;
|
||||
}
|
||||
// If there is no linkage to be performed or we're linking from the source,
|
||||
// bring over SGA.
|
||||
auto *Ty = TypeMap.get(SGA->getValueType());
|
||||
|
@ -1421,7 +1397,9 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) {
|
|||
Comdat *C = nullptr;
|
||||
bool HasUnnamedAddr = SGV->hasUnnamedAddr();
|
||||
|
||||
if (const Comdat *SC = SGV->getComdat()) {
|
||||
if (isPerformingImport() && !doImportAsDefinition(SGV)) {
|
||||
LinkFromSrc = false;
|
||||
} else if (const Comdat *SC = SGV->getComdat()) {
|
||||
Comdat::SelectionKind SK;
|
||||
std::tie(SK, LinkFromSrc) = ComdatsChosen[SC];
|
||||
C = DstM.getOrInsertComdat(SC->getName());
|
||||
|
@ -1454,9 +1432,6 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) {
|
|||
setVisibility(NewGV, SGV, DGV);
|
||||
} else {
|
||||
NewGV = copyGlobalValueProto(TypeMap, SGV, DGV, LinkFromSrc);
|
||||
|
||||
if (isPerformingImport() && !doImportAsDefinition(SGV))
|
||||
DoNotLinkFromSource.insert(SGV);
|
||||
}
|
||||
|
||||
NewGV->setUnnamedAddr(HasUnnamedAddr);
|
||||
|
|
|
@ -27,36 +27,36 @@
|
|||
; RUN: llvm-link %t2.bc -functionindex=%t3.thinlto.bc -import=globalfunc1:%t.bc -S | FileCheck %s --check-prefix=IMPORTGLOB1
|
||||
; IMPORTGLOB1-DAG: define available_externally void @globalfunc1
|
||||
; IMPORTGLOB1-DAG: declare void @globalfunc2
|
||||
; IMPORTGLOB1-DAG: declare extern_weak void @weakalias
|
||||
; IMPORTGLOB1-DAG: declare void @weakalias
|
||||
; IMPORTGLOB1-DAG: declare void @analias
|
||||
; IMPORTGLOB1-DAG: declare void @linkoncealias
|
||||
; IMPORTGLOB1-DAG: @linkoncealias = external global
|
||||
; IMPORTGLOB1-NOT: @linkoncefunc
|
||||
|
||||
; Ensure that weak alias to a non-imported function is correctly
|
||||
; turned into a declaration, but that strong alias to an imported function
|
||||
; is imported as alias.
|
||||
; RUN: llvm-link %t2.bc -functionindex=%t3.thinlto.bc -import=globalfunc2:%t.bc -S | FileCheck %s --check-prefix=IMPORTGLOB2
|
||||
; IMPORTGLOB2-DAG: declare void @analias()
|
||||
; IMPORTGLOB2-DAG: declare void @analias
|
||||
; IMPORTGLOB2-DAG: declare void @globalfunc1
|
||||
; IMPORTGLOB2-DAG: define available_externally void @globalfunc2
|
||||
; IMPORTGLOB2-DAG: declare extern_weak void @weakalias
|
||||
; IMPORTGLOB2-DAG: declare void @weakalias
|
||||
|
||||
; Ensure that strong alias imported in second pass of importing ends up
|
||||
; as an alias.
|
||||
; RUN: llvm-link %t2.bc -functionindex=%t3.thinlto.bc -import=globalfunc1:%t.bc -import=globalfunc2:%t.bc -S | FileCheck %s --check-prefix=IMPORTGLOB3
|
||||
; IMPORTGLOB3-DAG: declare void @analias()
|
||||
; IMPORTGLOB3-DAG: declare void @analias
|
||||
; IMPORTGLOB3-DAG: define available_externally void @globalfunc1
|
||||
; IMPORTGLOB3-DAG: define available_externally void @globalfunc2
|
||||
; IMPORTGLOB3-DAG: declare extern_weak void @weakalias
|
||||
; IMPORTGLOB3-DAG: declare void @weakalias
|
||||
|
||||
; Ensure that strong alias imported in first pass of importing ends up
|
||||
; as an alias, and that seeing the alias definition during a second inlining
|
||||
; pass is handled correctly.
|
||||
; RUN: llvm-link %t2.bc -functionindex=%t3.thinlto.bc -import=globalfunc2:%t.bc -import=globalfunc1:%t.bc -S | FileCheck %s --check-prefix=IMPORTGLOB4
|
||||
; IMPORTGLOB4-DAG: declare void @analias()
|
||||
; IMPORTGLOB4-DAG: declare void @analias
|
||||
; IMPORTGLOB4-DAG: define available_externally void @globalfunc2
|
||||
; IMPORTGLOB4-DAG: define available_externally void @globalfunc1
|
||||
; IMPORTGLOB4-DAG: declare extern_weak void @weakalias
|
||||
; IMPORTGLOB4-DAG: declare void @weakalias
|
||||
|
||||
; An alias to an imported function is imported as alias if the function is not
|
||||
; available_externally.
|
||||
|
|
|
@ -25,11 +25,11 @@ entry:
|
|||
}
|
||||
|
||||
; Won't import weak alias
|
||||
; CHECK-DAG: declare extern_weak void @weakalias()
|
||||
; CHECK-DAG: declare void @weakalias
|
||||
declare void @weakalias(...) #1
|
||||
|
||||
; Cannot create an alias to available_externally
|
||||
; CHECK-DAG: declare void @analias()
|
||||
; CHECK-DAG: declare void @analias
|
||||
declare void @analias(...) #1
|
||||
|
||||
; Aliases import the aliasee function
|
||||
|
|
Loading…
Reference in New Issue