Move EntryExitInstrumenter(PostInlining=true) to as late as possible and EntryExitInstrumenter(PostInlining=false) to an early pre-inlining stage (but skip for ThinLTO post-link). This should fix the issues reported in https://github.com/rust-lang/rust/issues/92109 and https://github.com/llvm/llvm-project/issues/52853. These are caused by https://reviews.llvm.org/D97608.
28 lines
953 B
LLVM
28 lines
953 B
LLVM
; RUN: llc -mtriple=x86_64-- -O0 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=x86_64-- -O1 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=x86_64-- -O2 < %s | FileCheck %s
|
|
|
|
; The codegen should insert post-inlining instrumentation calls and should not
|
|
; insert pre-inlining instrumentation.
|
|
|
|
; CHECK-NOT: callq __cyg_profile_func_enter
|
|
|
|
define void @leaf_function() #0 {
|
|
; CHECK-LABEL: leaf_function:
|
|
; CHECK: callq __cyg_profile_func_enter_bare
|
|
; CHECK: callq __cyg_profile_func_exit
|
|
ret void
|
|
}
|
|
|
|
define void @root_function() #0 {
|
|
entry:
|
|
; CHECK-LABEL: root_function:
|
|
; CHECK: callq __cyg_profile_func_enter_bare
|
|
; CHECK-NEXT: callq leaf_function
|
|
; CHECK: callq __cyg_profile_func_exit
|
|
call void @leaf_function()
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { "instrument-function-entry"="__cyg_profile_func_enter" "instrument-function-entry-inlined"="__cyg_profile_func_enter_bare" "instrument-function-exit-inlined"="__cyg_profile_func_exit" }
|