xref: /aosp_15_r20/external/llvm/test/Bitcode/thinlto-function-summary.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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