; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=2 -sanitizer-coverage-trace-pc-entry-exit -S | FileCheck %s --check-prefix=CHECK ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=2 -sanitizer-coverage-trace-pc-entry-exit -sanitizer-coverage-trace-pc -S | FileCheck %s --check-prefix=CHECK,CHECK_BBCOV target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-unknown-linux-gnu" declare i32 @callee_a(i32) declare i32 @callee_b() define i32 @func_multi_return(i32 noundef %a) #0 { entry: %tobool.not = icmp eq i32 %a, 0 br i1 %tobool.not, label %if.else, label %if.then if.then: %call = call i32 @callee_a(i32 noundef %a) ret i32 %call if.else: %call1 = call i32 @callee_b() ret i32 %call1 } ; CHECK: define i32 @func_multi_return ; CHECK-NOT: call void @__sanitizer_cov_trace_pc() ; CHECK: call void @__sanitizer_cov_trace_pc_entry() ; CHECK-NOT: call void @__sanitizer_cov_trace_pc() ; CHECK: br ; CHECK_BBCOV: call void @__sanitizer_cov_trace_pc() ; CHECK: call i32 @callee_a ; CHECK: notail call void @__sanitizer_cov_trace_pc_exit() ; CHECK: ret ; CHECK_BBCOV: call void @__sanitizer_cov_trace_pc() ; CHECK: call i32 @callee_b ; CHECK: notail call void @__sanitizer_cov_trace_pc_exit() ; CHECK: ret ; CHECK: } define i32 @func_musttail(i32 noundef %a) #0 { %call = musttail call i32 @callee_a(i32 noundef %a) ret i32 %call } ; CHECK: define i32 @func_musttail ; CHECK: call void @__sanitizer_cov_trace_pc_entry() ; CHECK: notail call void @__sanitizer_cov_trace_pc_exit() ; CHECK: musttail call i32 @callee_a ; CHECK: ret ; CHECK: } attributes #0 = { nounwind }