mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-26 06:14:42 +00:00
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257493 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
75660cfed9
commit
51ec8b2357
@ -133,6 +133,8 @@ static void findExternalCalls(const Module &DestModule, Function &F,
|
||||
// Ignore functions already present in the destination module
|
||||
auto *SrcGV = DestModule.getNamedValue(ImportedName);
|
||||
if (SrcGV) {
|
||||
if (GlobalAlias *SGA = dyn_cast<GlobalAlias>(SrcGV))
|
||||
SrcGV = SGA->getBaseObject();
|
||||
assert(isa<Function>(SrcGV) && "Name collision during import");
|
||||
if (!cast<Function>(SrcGV)->isDeclaration()) {
|
||||
DEBUG(dbgs() << DestModule.getModuleIdentifier() << ": Ignoring "
|
||||
|
@ -0,0 +1,7 @@
|
||||
declare void @analias()
|
||||
|
||||
define void @callanalias() #0 {
|
||||
entry:
|
||||
call void @analias()
|
||||
ret void
|
||||
}
|
25
test/Transforms/FunctionImport/funcimport_alias.ll
Normal file
25
test/Transforms/FunctionImport/funcimport_alias.ll
Normal 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()
|
Loading…
x
Reference in New Issue
Block a user