xref: /llvm-project/llvm/test/Transforms/PGOProfile/callbr.ll (revision 0caa4a9559edcbb4195ce140de0658e46a90b52a)
1b5d884a3SFangrui Song; RUN: opt -passes=pgo-instr-gen -S 2>&1 < %s | FileCheck %s
2*0caa4a95SRong Xu;
3*0caa4a95SRong Xu; RUN: llvm-profdata merge %S/Inputs/callbr.proftext -o %t.profdata
4*0caa4a95SRong Xu; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s --check-prefix=USE
5*0caa4a95SRong Xu
641ba8018SNick Desaulniers
741ba8018SNick Desaulniersdefine i32 @a() {
841ba8018SNick Desaulniersentry:
99ff36df5SFangrui Song; CHECK-NOT: ptrtoint ptr asm sideeffect
1041ba8018SNick Desaulniers; CHECK: callbr void asm sideeffect
1141ba8018SNick Desaulniers  %retval = alloca i32, align 4
122a721374SNikita Popov  callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"() #1
1341ba8018SNick Desaulniers          to label %asm.fallthrough [label %b]
1441ba8018SNick Desaulniers
1541ba8018SNick Desaulniersasm.fallthrough:
1641ba8018SNick Desaulniers  br label %b
1741ba8018SNick Desaulniers
1841ba8018SNick Desaulniersb:
199ff36df5SFangrui Song  %0 = load i32, ptr %retval, align 4
2041ba8018SNick Desaulniers  ret i32 %0
2141ba8018SNick Desaulniers}
22*0caa4a95SRong Xu; USE-LABEL: @a
23*0caa4a95SRong Xu; USE-SAME: !prof ![[BW_ENTRY:[0-9]+]]
24*0caa4a95SRong Xu; USE: callbr void asm sideeffect
25*0caa4a95SRong Xu; USE: to label
26*0caa4a95SRong Xu; USE-SAME: !prof ![[BW_CALLBR:[0-9]+]]
27*0caa4a95SRong Xu; USE ![[BW_ENTRY]] = !{!"function_entry_count", i64 100}
28*0caa4a95SRong Xu; USE ![[BW_CALLBR]] = !{!"branch_weights", i32 80, i32 20}
29*0caa4a95SRong Xu
30