1; Do setup work for all below tests: generate bitcode and combined index 2; RUN: llvm-as -function-summary %s -o %t.bc 3; RUN: llvm-as -function-summary %p/Inputs/funcimport.ll -o %t2.bc 4; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc 5 6; Do the import now 7; RUN: opt -function-import -summary-file %t3.thinlto.bc %s -S | FileCheck %s 8 9define i32 @main() #0 { 10entry: 11 call void (...) @weakalias() 12 call void (...) @analias() 13 %call = call i32 (...) @referencestatics() 14 %call1 = call i32 (...) @referenceglobals() 15 %call2 = call i32 (...) @referencecommon() 16 call void (...) @setfuncptr() 17 call void (...) @callfuncptr() 18 call void (...) @weakfunc() 19 ret i32 0 20} 21 22; Won't import weak alias 23; CHECK-DAG: declare extern_weak void @weakalias() 24declare void @weakalias(...) #1 25 26; Aliases import the aliasee function 27; CHECK-DAG: @analias = alias void (...), bitcast (void ()* @globalfunc2 to void (...)*) 28; CHECK-DAG: define available_externally void @globalfunc2() 29declare void @analias(...) #1 30 31; CHECK-DAG: define available_externally i32 @referencestatics(i32 %i) 32declare i32 @referencestatics(...) #1 33 34; The import of referencestatics will expose call to staticfunc that 35; should in turn be imported as a promoted/renamed and hidden function. 36; Ensure that the call is to the properly-renamed function. 37; CHECK-DAG: %call = call i32 @staticfunc.llvm.2() 38; CHECK-DAG: define available_externally hidden i32 @staticfunc.llvm.2() 39 40; CHECK-DAG: define available_externally i32 @referenceglobals(i32 %i) 41declare i32 @referenceglobals(...) #1 42 43; The import of referenceglobals will expose call to globalfunc1 that 44; should in turn be imported. 45; CHECK-DAG: define available_externally void @globalfunc1() 46 47; CHECK-DAG: define available_externally i32 @referencecommon(i32 %i) 48declare i32 @referencecommon(...) #1 49 50; CHECK-DAG: define available_externally void @setfuncptr() 51declare void @setfuncptr(...) #1 52 53; CHECK-DAG: define available_externally void @callfuncptr() 54declare void @callfuncptr(...) #1 55 56; Ensure that all uses of local variable @P which has used in setfuncptr 57; and callfuncptr are to the same promoted/renamed global. 58; CHECK-DAG: @P.llvm.2 = available_externally hidden global void ()* null 59; CHECK-DAG: %0 = load void ()*, void ()** @P.llvm.2, 60; CHECK-DAG: store void ()* @staticfunc2.llvm.2, void ()** @P.llvm.2, 61 62; Won't import weak func 63; CHECK-DAG: declare void @weakfunc(...) 64declare void @weakfunc(...) #1 65 66