83 lines · plain
1; Test that instrumentaiton works fine for the case of failing the split critical edges.2; RUN: opt < %s -passes=pgo-instr-gen -S | FileCheck %s --check-prefix=GEN3; RUN: llvm-profdata merge %S/Inputs/PR41279.proftext -o %t.profdata4; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s --check-prefix=USE5 6declare void @f3(ptr, ptr, i64)7declare { ptr, i64 } @f0(ptr)8declare i64 @f1()9declare void @invok2(ptr, ptr noalias readonly align 1, i64)10declare void @invok1(ptr, ptr, i64)11declare i32 @__CxxFrameHandler3(...)12 13define void @foo(ptr, ptr) personality ptr @__CxxFrameHandler3 {14; USE-LABEL: @foo15; USE-SAME: !prof ![[FUNC_ENTRY_COUNT:[0-9]+]]16 17 %3 = alloca i8, align 118 store i8 0, ptr %3, align 119 %4 = call i64 @f1()20 %5 = icmp ult i64 %4, 3221 br i1 %5, label %7, label %1322; USE: br i1 %5, label %7, label %1323; USE-SAME: !prof ![[BW_ENTRY1:[0-9]+]]24 256:26 cleanupret from %17 unwind to caller27; GEN: 6:28; GEN: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 {{[0-9]+}}, i32 4, i32 2)29 307:31 store i8 1, ptr %3, align 132 %8 = call { ptr, i64 } @f0(ptr %0)33 %9 = extractvalue { ptr, i64 } %8, 034 %10 = extractvalue { ptr, i64 } %8, 135 invoke void @invok1(ptr %1, ptr %0, i64 1)36 to label %11 unwind label %1637; GEN: 7:38; GEN-NOT: call void @llvm.instrprof.increment39 4011:41 store i8 0, ptr %3, align 142 invoke void @invok2(ptr %1, ptr noalias readonly align 1 %9, i64 %10)43 to label %12 unwind label %1644; GEN: 11:45; GEN-NOT: call void @llvm.instrprof.increment46 4712:48 store i8 0, ptr %3, align 149 br label %1450; GEN: 12:51; GEN: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 {{[0-9]+}}, i32 4, i32 1)52 5313:54 call void @f3(ptr %0, ptr %1, i64 1)55 br label %1456; GEN: 13:57; GEN: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 {{[0-9]+}}, i32 4, i32 0)58 5914:60 ret void61 6215:63 store i8 0, ptr %3, align 164 br label %665; GEN: 15:66; GEN: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 {{[0-9]+}}, i32 4, i32 3)67 6816:69 %17 = cleanuppad within none []70 %18 = load i8, ptr %3, align 171 %19 = trunc i8 %18 to i172 br i1 %19, label %15, label %673; USE: br i1 %19, label %15, label %674; USE-SAME: !prof ![[BW_ENTRY2:[0-9]+]]75}76 77; USE-DAG: {{![0-9]+}} = !{i32 1, !"ProfileSummary", {{![0-9]+}}}78; USE-DAG: {{![0-9]+}} = !{!"DetailedSummary", {{![0-9]+}}}79; USE-DAG: ![[FUNC_ENTRY_COUNT]] = !{!"function_entry_count", i64 8}80; USE-DAG: ![[BW_ENTRY1]] = !{!"branch_weights", i32 5, i32 3}81; USE-DAG: ![[BW_ENTRY2]] = !{!"branch_weights", i32 2, i32 1}82 83