| ; RUN: opt -ee-instrument < %s | opt -inline | llc | FileCheck %s | |
| ; The run-line mimics how Clang might run the instrumentation passes. | |
| target datalayout = "E-m:e-i64:64-n32:64" | |
| target triple = "powerpc64-bgq-linux" | |
| define void @leaf_function() #0 { | |
| entry: | |
| ret void | |
| ; CHECK-LABEL: leaf_function: | |
| ; CHECK: bl mcount | |
| ; CHECK-NOT: bl | |
| ; CHECK: bl __cyg_profile_func_enter | |
| ; CHECK-NOT: bl | |
| ; CHECK: bl __cyg_profile_func_exit | |
| ; CHECK-NOT: bl | |
| ; CHECK: blr | |
| } | |
| define void @root_function() #0 { | |
| entry: | |
| call void @leaf_function() | |
| ret void | |
| ; CHECK-LABEL: root_function: | |
| ; CHECK: bl mcount | |
| ; CHECK-NOT: bl | |
| ; CHECK: bl __cyg_profile_func_enter | |
| ; CHECK-NOT: bl | |
| ; Entry and exit calls, inlined from @leaf_function() | |
| ; CHECK: bl __cyg_profile_func_enter | |
| ; CHECK-NOT: bl | |
| ; CHECK: bl __cyg_profile_func_exit | |
| ; CHECK-NOT: bl | |
| ; CHECK: bl __cyg_profile_func_exit | |
| ; CHECK-NOT: bl | |
| ; CHECK: blr | |
| } | |
| attributes #0 = { "instrument-function-entry-inlined"="mcount" "instrument-function-entry"="__cyg_profile_func_enter" "instrument-function-exit"="__cyg_profile_func_exit" } |