1*9880d681SAndroid Build Coastguard Worker; RUN: opt -name-anon-functions -module-summary < %s | llvm-bcanalyzer -dump | FileCheck %s -check-prefix=BC 2*9880d681SAndroid Build Coastguard Worker; Check for summary block/records. 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Check the value ids in the summary entries against the 5*9880d681SAndroid Build Coastguard Worker; same in the ValueSumbolTable, to ensure the ordering is stable. 6*9880d681SAndroid Build Coastguard Worker; Also check the linkage field on the summary entries. 7*9880d681SAndroid Build Coastguard Worker; BC: <GLOBALVAL_SUMMARY_BLOCK 8*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <VERSION 9*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <PERMODULE {{.*}} op0=1 op1=0 10*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <PERMODULE {{.*}} op0=2 op1=0 11*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <PERMODULE {{.*}} op0=3 op1=7 12*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <ALIAS {{.*}} op0=4 op1=0 op2=3 13*9880d681SAndroid Build Coastguard Worker; BC-NEXT: </GLOBALVAL_SUMMARY_BLOCK 14*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <VALUE_SYMTAB 15*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <FNENTRY {{.*}} op0=3 {{.*}}> record string = 'anon. 16*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <FNENTRY {{.*}} op0=1 {{.*}}> record string = 'foo' 17*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <FNENTRY {{.*}} op0=2 {{.*}}> record string = 'bar' 18*9880d681SAndroid Build Coastguard Worker; BC-NEXT: <FNENTRY {{.*}} op0=4 {{.*}}> record string = 'f' 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; RUN: opt -name-anon-functions -module-summary < %s | llvm-dis | FileCheck %s 21*9880d681SAndroid Build Coastguard Worker; Check that this round-trips correctly. 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; ModuleID = '<stdin>' 24*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 25*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; CHECK: define i32 @foo() 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable 30*9880d681SAndroid Build Coastguard Workerdefine i32 @foo() #0 { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker ret i32 1 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; CHECK: define i32 @bar(i32 %x) 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable 38*9880d681SAndroid Build Coastguard Workerdefine i32 @bar(i32 %x) #0 { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker ret i32 %x 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; FIXME: Anonymous function and alias not currently in summary until 44*9880d681SAndroid Build Coastguard Worker; follow on fixes to rename anonymous functions and emit alias summary 45*9880d681SAndroid Build Coastguard Worker; entries are committed. 46*9880d681SAndroid Build Coastguard Worker; Check an anonymous function as well, since in that case only the alias 47*9880d681SAndroid Build Coastguard Worker; ends up in the value symbol table and having a summary. 48*9880d681SAndroid Build Coastguard Worker@f = alias void (), void ()* @0 ; <void ()*> [#uses=0] 49*9880d681SAndroid Build Coastguard Worker@h = external global void ()* ; <void ()*> [#uses=0] 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine internal void @0() nounwind { 52*9880d681SAndroid Build Coastguard Workerentry: 53*9880d681SAndroid Build Coastguard Worker store void()* @0, void()** @h 54*9880d681SAndroid Build Coastguard Worker br label %return 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59