blob: 7391a6ee6f9128dfc2776160cfacfee8002b44ed [file] [log] [blame]
; REQUIRES: x86-registered-target
;
; Check that the basic block profile dump outputs data and in the correct
; format.
;
; RUN: llc -mtriple=x86_64-linux-unknown -o /dev/null -basic-block-sections=labels -mbb-profile-dump=- %s | FileCheck %s
; Check that given a simple case, we can return the default MBFI
define i64 @f2(i64 %a, i64 %b) !prof !1{
%sum = add i64 %a, %b
ret i64 %sum
}
; CHECK: f2,0,1.000000e+03
define i64 @f1() !prof !2{
%sum = call i64 @f2(i64 2, i64 2)
%isEqual = icmp eq i64 %sum, 4
br i1 %isEqual, label %ifEqual, label %ifNotEqual, !prof !3
ifEqual:
ret i64 0
ifNotEqual:
ret i64 %sum
}
; CHECK-NEXT: f1,0,1.000000e+01
; CHECK-NEXT: f1,2,6.000000e+00
; CHECK-NEXT: f1,1,4.000000e+00
define void @f3(i32 %iter) !prof !4 {
entry:
br label %loop
loop:
%i = phi i32 [0, %entry], [%i_next, %loop]
%i_next = add i32 %i, 1
%exit_cond = icmp slt i32 %i_next, %iter
br i1 %exit_cond, label %loop, label %exit, !prof !5
exit:
ret void
}
; CHECK-NEXT: f3,0,2.000000e+00
; CHECK-NEXT: f3,1,2.002000e+03
; CHECK-NEXT: f3,2,2.000000e+00
!1 = !{!"function_entry_count", i64 1000}
!2 = !{!"function_entry_count", i64 10}
!3 = !{!"branch_weights", i32 2, i32 3}
!4 = !{!"function_entry_count", i64 2}
!5 = !{!"branch_weights", i32 1000, i32 1}
; Check that if we pass -mbb-profile-dump but don't set -basic-block-sections,
; we get an appropriate error message
; RUN: not llc -mtriple=x86_64-linux-unknown -o /dev/null -mbb-profile-dump=- %s 2>&1 | FileCheck --check-prefix=NO-SECTIONS %s
; NO-SECTIONS: <unknown>:0: error: Unable to find BB labels for MBB profile dump. -mbb-profile-dump must be called with -basic-block-sections=labels