1 // RUN: %clang_profgen -o %t -O3 %s
2 // RUN: env LLVM_PROFILE_FILE=%t1.profraw %run %t %t2.profraw
3 // RUN: llvm-profdata merge -o %t1.profdata %t1.profraw
4 // RUN: %clang_profuse=%t1.profdata -o - -S -emit-llvm %s | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK
5 // RUN: llvm-profdata merge -o %t2.profdata %t2.profraw
6 // RUN: %clang_profuse=%t2.profdata -o - -S -emit-llvm %s | FileCheck %s --check-prefix=CHECK2 --check-prefix=CHECK
8 int __llvm_profile_write_file(void);
9 void __llvm_profile_set_filename(const char *);
11 int main(int argc
, const char *argv
[]) {
12 // CHECK-LABEL: define i32 @main
13 // CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof !1
17 // Write out the profile.
18 __llvm_profile_write_file();
20 // Change the profile.
23 // It'll write out again at exit; change the filename so we get two files.
24 __llvm_profile_set_filename(argv
[1]);
28 // CHECK-LABEL: define i32 @foo
29 // CHECK1: br i1 %{{.*}}, label %{{.*}}, label %{{[^,]+$}}
30 // CHECK2: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof !2
31 return X
<= 0 ? -X
: X
;
33 // CHECK: !1 = metadata !{metadata !"branch_weights", i32 1, i32 2}
34 // CHECK2: !2 = metadata !{metadata !"branch_weights", i32 2, i32 1}