| ; RUN: opt < %s -passes=pgo-icall-prom -S | FileCheck %s --check-prefix=ICALL-PROM |
| |
| target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-unknown-linux-gnu" |
| |
| @foo = common global ptr null, align 8 |
| |
| define ptr @func1() { |
| ret ptr null |
| } |
| |
| define ptr @func2() { |
| ret ptr null |
| } |
| |
| define ptr @func3() { |
| ret ptr null |
| } |
| |
| define ptr @func4() { |
| ret ptr null |
| } |
| |
| define ptr @bar() { |
| entry: |
| %tmp = load ptr, ptr @foo, align 8 |
| ; ICALL-PROM: [[CMP1:%[0-9]+]] = icmp eq ptr %tmp, @func4 |
| ; ICALL-PROM: br i1 [[CMP1]], label %if.true.direct_targ, label %[[L1:[0-9]+]], !prof [[BRANCH_WEIGHT1:![0-9]+]] |
| ; ICALL-PROM: if.true.direct_targ: |
| ; ICALL-PROM: [[DIRCALL_RET1:%[0-9]+]] = musttail call ptr @func4() |
| ; ICALL-PROM: ret ptr [[DIRCALL_RET1]] |
| ; ICALL-PROM: [[L1]]: |
| ; ICALL-PROM: [[CMP2:%[0-9]+]] = icmp eq ptr %tmp, @func2 |
| ; ICALL-PROM: br i1 [[CMP2]], label %if.true.direct_targ1, label %[[L2:[0-9]+]], !prof [[BRANCH_WEIGHT2:![0-9]+]] |
| ; ICALL-PROM: if.true.direct_targ1: |
| ; ICALL-PROM: [[DIRCALL_RET2:%[0-9]+]] = musttail call ptr @func2() |
| ; ICALL-PROM: ret ptr [[DIRCALL_RET2]] |
| ; ICALL-PROM: [[L2]]: |
| ; ICALL-PROM: [[CMP3:%[0-9]+]] = icmp eq ptr %tmp, @func3 |
| ; ICALL-PROM: br i1 [[CMP3]], label %if.true.direct_targ2, label %[[L3:[0-9]+]], !prof [[BRANCH_WEIGHT3:![0-9]+]] |
| ; ICALL-PROM: if.true.direct_targ2: |
| ; ICALL-PROM: [[DIRCALL_RET3:%[0-9]+]] = musttail call ptr @func3() |
| ; ICALL-PROM: ret ptr [[DIRCALL_RET3]] |
| ; ICALL-PROM: [[L3]]: |
| ; ICALL-PROM: %call = musttail call ptr %tmp() |
| ; ICALL-PROM: ret ptr %call |
| %call = musttail call ptr %tmp(), !prof !1 |
| ret ptr %call |
| } |
| |
| define ptr @bar2() { |
| entry: |
| %tmp = load ptr, ptr @foo, align 8 |
| ; ICALL-PROM: [[CMP1:%[0-9]+]] = icmp eq ptr %tmp, @func4 |
| ; ICALL-PROM: br i1 [[CMP1]], label %if.true.direct_targ, label %[[L4:[0-9]+]], !prof [[BRANCH_WEIGHT4:![0-9]+]] |
| ; ICALL-PROM: if.true.direct_targ: |
| ; ICALL-PROM: [[DIRCALL_RET1:%[0-9]+]] = musttail call ptr @func4() |
| ; ICALL-PROM: ret ptr [[DIRCALL_RET1]] |
| ; ICALL-PROM: [[L4]]: |
| ; ICALL-PROM: %call = musttail call ptr %tmp() |
| ; ICALL-PROM: ret ptr %call |
| %call = musttail call ptr %tmp(), !prof !2 |
| ret ptr %call |
| } |
| |
| !1 = !{!"VP", i32 0, i64 1600, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410, i64 -6929281286627296573, i64 150, i64 -2545542355363006406, i64 10} |
| !2 = !{!"VP", i32 0, i64 100, i64 7651369219802541373, i64 100} |
| |
| ; ICALL-PROM: [[BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1030, i32 570} |
| ; ICALL-PROM: [[BRANCH_WEIGHT2]] = !{!"branch_weights", i32 410, i32 160} |
| ; ICALL-PROM: [[BRANCH_WEIGHT3]] = !{!"branch_weights", i32 150, i32 10} |
| ; ICALL-PROM: [[BRANCH_WEIGHT4]] = !{!"branch_weights", i32 100, i32 0} |