[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / Transforms / PGOProfile / indirect_call_promotion_musttail.ll
blob128ab158d249b1b5511caede6ce096711568662f
1 ; RUN: opt < %s -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM
3 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
6 @foo = common global ptr null, align 8
8 define ptr @func1() {
9   ret ptr null
12 define ptr @func2() {
13   ret ptr null
16 define ptr @func3() {
17   ret ptr null
20 define ptr @func4() {
21   ret ptr null
24 define ptr @bar() {
25 entry:
26   %tmp = load ptr, ptr @foo, align 8
27 ; ICALL-PROM:   [[CMP1:%[0-9]+]] = icmp eq ptr %tmp, @func4
28 ; ICALL-PROM:   br i1 [[CMP1]], label %if.true.direct_targ, label %[[L1:[0-9]+]], !prof [[BRANCH_WEIGHT1:![0-9]+]]
29 ; ICALL-PROM: if.true.direct_targ:
30 ; ICALL-PROM:   [[DIRCALL_RET1:%[0-9]+]] = musttail call ptr @func4()
31 ; ICALL-PROM:   ret ptr [[DIRCALL_RET1]]
32 ; ICALL-PROM: [[L1]]:
33 ; ICALL-PROM:   [[CMP2:%[0-9]+]] = icmp eq ptr %tmp, @func2
34 ; ICALL-PROM:   br i1 [[CMP2]], label %if.true.direct_targ1, label %[[L2:[0-9]+]], !prof [[BRANCH_WEIGHT2:![0-9]+]]
35 ; ICALL-PROM: if.true.direct_targ1:
36 ; ICALL-PROM:   [[DIRCALL_RET2:%[0-9]+]] = musttail call ptr @func2()
37 ; ICALL-PROM:   ret ptr [[DIRCALL_RET2]]
38 ; ICALL-PROM: [[L2]]:
39 ; ICALL-PROM:   [[CMP3:%[0-9]+]] = icmp eq ptr %tmp, @func3
40 ; ICALL-PROM:   br i1 [[CMP3]], label %if.true.direct_targ2, label %[[L3:[0-9]+]], !prof [[BRANCH_WEIGHT3:![0-9]+]]
41 ; ICALL-PROM: if.true.direct_targ2:
42 ; ICALL-PROM:   [[DIRCALL_RET3:%[0-9]+]] = musttail call ptr @func3()
43 ; ICALL-PROM:   ret ptr [[DIRCALL_RET3]]
44 ; ICALL-PROM: [[L3]]:
45 ; ICALL-PROM:   %call = musttail call ptr %tmp()
46 ; ICALL-PROM:   ret ptr %call
47   %call = musttail call ptr %tmp(), !prof !1
48   ret ptr %call
51 define ptr @bar2() {
52 entry:
53   %tmp = load ptr, ptr @foo, align 8
54 ; ICALL-PROM:   [[CMP1:%[0-9]+]] = icmp eq ptr %tmp, @func4
55 ; ICALL-PROM:   br i1 [[CMP1]], label %if.true.direct_targ, label %[[L4:[0-9]+]], !prof [[BRANCH_WEIGHT4:![0-9]+]]
56 ; ICALL-PROM: if.true.direct_targ:
57 ; ICALL-PROM:   [[DIRCALL_RET1:%[0-9]+]] = musttail call ptr @func4()
58 ; ICALL-PROM:   ret ptr [[DIRCALL_RET1]]
59 ; ICALL-PROM: [[L4]]:
60 ; ICALL-PROM:   %call = musttail call ptr %tmp()
61 ; ICALL-PROM:   ret ptr %call
62   %call = musttail call ptr %tmp(), !prof !2
63   ret ptr %call
66 !1 = !{!"VP", i32 0, i64 1600, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410, i64 -6929281286627296573, i64 150, i64 -2545542355363006406, i64 10}
67 !2 = !{!"VP", i32 0, i64 100, i64 7651369219802541373, i64 100}
69 ; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1030, i32 570}
70 ; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 410, i32 160}
71 ; ICALL-PROM: [[BRANCH_WEIGHT3]] = !{!"branch_weights", i32 150, i32 10}
72 ; ICALL-PROM: [[BRANCH_WEIGHT4]] = !{!"branch_weights", i32 100, i32 0}