[ThinLTO] Handle an external call from an import to an alias in dest

The findExternalCalls routine ignores calls to functions already
defined in the dest module. This was not handling the case where
the definition in the current module is actually an alias to a
function call.

llvm-svn: 257493
This commit is contained in:
Teresa Johnson 2016-01-12 17:48:44 +00:00
parent 3a5b6e2750
commit 388497e8be
3 changed files with 34 additions and 0 deletions

View File

@ -133,6 +133,8 @@ static void findExternalCalls(const Module &DestModule, Function &F,
// Ignore functions already present in the destination module // Ignore functions already present in the destination module
auto *SrcGV = DestModule.getNamedValue(ImportedName); auto *SrcGV = DestModule.getNamedValue(ImportedName);
if (SrcGV) { if (SrcGV) {
if (GlobalAlias *SGA = dyn_cast<GlobalAlias>(SrcGV))
SrcGV = SGA->getBaseObject();
assert(isa<Function>(SrcGV) && "Name collision during import"); assert(isa<Function>(SrcGV) && "Name collision during import");
if (!cast<Function>(SrcGV)->isDeclaration()) { if (!cast<Function>(SrcGV)->isDeclaration()) {
DEBUG(dbgs() << DestModule.getModuleIdentifier() << ": Ignoring " DEBUG(dbgs() << DestModule.getModuleIdentifier() << ": Ignoring "

View File

@ -0,0 +1,7 @@
declare void @analias()
define void @callanalias() #0 {
entry:
call void @analias()
ret void
}

View File

@ -0,0 +1,25 @@
; Do setup work for all below tests: generate bitcode and combined index
; RUN: llvm-as -function-summary %s -o %t.bc
; RUN: llvm-as -function-summary %p/Inputs/funcimport_alias.ll -o %t2.bc
; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc %t3.bc
; Do the import now. Ensures that the importer handles an external call
; from imported callanalias() to a function that is defined already in
; the dest module, but as an alias.
; RUN: opt -function-import -summary-file %t3.thinlto.bc %s -S | FileCheck %s
define i32 @main() #0 {
entry:
call void @callanalias()
ret i32 0
}
@analias = alias void (), void ()* @globalfunc
define void @globalfunc() #0 {
entry:
ret void
}
declare void @callanalias() #1
; CHECK-DAG: define available_externally void @callanalias()