1 // REQUIRES: x86-registered-target
2 // RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O0 -emit-llvm -o - %s | FileCheck %s
3 // RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -emit-llvm -o - %s | FileCheck %s
4 // RUN: %clang_cc1 -fno-experimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - -emit-llvm %s | FileCheck -check-prefix=NOINLINE %s
5 
6 // RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O0 -o - -emit-llvm %s | FileCheck %s
7 // RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions -O2 -o - -emit-llvm %s | FileCheck %s
8 // RUN: %clang_cc1 -fexperimental-new-pass-manager -triple x86_64-unknown-unknown -S -finstrument-functions-after-inlining -O2 -o - -emit-llvm %s | FileCheck -check-prefix=NOINLINE %s
9 
leaf(int x)10 __attribute__((always_inline)) int leaf(int x) {
11   return x;
12 // CHECK-LABEL: define {{.*}} @leaf
13 // CHECK: call void @__cyg_profile_func_enter
14 // CHECK-NOT: cyg_profile
15 // CHECK: call void @__cyg_profile_func_exit
16 // CHECK-NOT: cyg_profile
17 // CHECK: ret
18 }
19 
root(int x)20 int root(int x) {
21   return leaf(x);
22 // CHECK-LABEL: define {{.*}} @root
23 // CHECK: call void @__cyg_profile_func_enter
24 // CHECK-NOT: cyg_profile
25 
26 // Inlined from leaf():
27 // CHECK: call void @__cyg_profile_func_enter
28 // CHECK-NOT: cyg_profile
29 // CHECK: call void @__cyg_profile_func_exit
30 // CHECK-NOT: cyg_profile
31 
32 // CHECK: call void @__cyg_profile_func_exit
33 // CHECK: ret
34 
35 // NOINLINE-LABEL: define {{.*}} @root
36 // NOINLINE: call void @__cyg_profile_func_enter
37 // NOINLINE-NOT: cyg_profile
38 // NOINLINE: call void @__cyg_profile_func_exit
39 // NOINLINE-NOT: cyg_profile
40 // NOINLINE: ret
41 }
42