1b2d3c315SMircea Trofin; Check that flattened profile lowering handles cold subgraphs that end in "unreachable" 2b2d3c315SMircea Trofin; RUN: split-file %s %t 3*63293558SMircea Trofin; RUN: llvm-ctxprof-util fromYAML --input=%t/profile.yaml --output=%t/profile.ctxprofdata 4b2d3c315SMircea Trofin; RUN: opt -passes=ctx-prof-flatten %t/example.ll -use-ctx-profile=%t/profile.ctxprofdata -S -o - | FileCheck %s 5b2d3c315SMircea Trofin 6b2d3c315SMircea Trofin; CHECK-LABEL: entry: 7b2d3c315SMircea Trofin; CHECK: br i1 %t, label %yes, label %no, !prof ![[C1:[0-9]+]] 8b2d3c315SMircea Trofin; CHECK-LABEL: no: 9b2d3c315SMircea Trofin; CHECK-NOT: !prof 10b2d3c315SMircea Trofin; CHECK-LABEL: no1: 11b2d3c315SMircea Trofin; CHECK-NOT: !prof 12b2d3c315SMircea Trofin; CHECK-LABEL: no2: 13b2d3c315SMircea Trofin; CHECK-NOT: !prof 14b2d3c315SMircea Trofin; CHECK-LABEL: yes: 15b2d3c315SMircea Trofin; CHECK: br i1 %t3, label %yes1, label %yes2, !prof ![[C1]] 16b2d3c315SMircea Trofin; CHECK-NOT: !prof 17b2d3c315SMircea Trofin; CHECK: ![[C1]] = !{!"branch_weights", i32 6, i32 0} 18b2d3c315SMircea Trofin 19b2d3c315SMircea Trofin;--- example.ll 20b2d3c315SMircea Trofindefine void @f1(i32 %cond) !guid !0 { 21b2d3c315SMircea Trofinentry: 22b2d3c315SMircea Trofin call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 0) 23b2d3c315SMircea Trofin %t = icmp eq i32 %cond, 1 24b2d3c315SMircea Trofin br i1 %t, label %yes, label %no 25b2d3c315SMircea Trofin 26b2d3c315SMircea Trofinno: 27b2d3c315SMircea Trofin %t2 = icmp eq i32 %cond, 2 28b2d3c315SMircea Trofin br i1 %t2, label %no1, label %no2 29b2d3c315SMircea Trofinno1: 30b2d3c315SMircea Trofin unreachable 31b2d3c315SMircea Trofinno2: 32b2d3c315SMircea Trofin call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 1) 33b2d3c315SMircea Trofin unreachable 34b2d3c315SMircea Trofinyes: 35b2d3c315SMircea Trofin %t3 = icmp eq i32 %cond, 3 36b2d3c315SMircea Trofin br i1 %t3, label %yes1, label %yes2 37b2d3c315SMircea Trofinyes1: 38b2d3c315SMircea Trofin br label %exit 39b2d3c315SMircea Trofinyes2: 40b2d3c315SMircea Trofin call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 2) 41b2d3c315SMircea Trofin %t4 = icmp eq i32 %cond, 4 42b2d3c315SMircea Trofin br i1 %t4, label %yes3, label %yes4 43b2d3c315SMircea Trofinyes3: 44b2d3c315SMircea Trofin br label %exit 45b2d3c315SMircea Trofinyes4: 46b2d3c315SMircea Trofin call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 3) 47b2d3c315SMircea Trofin unreachable 48b2d3c315SMircea Trofinexit: 49b2d3c315SMircea Trofin ret void 50b2d3c315SMircea Trofin} 51b2d3c315SMircea Trofin 52b2d3c315SMircea Trofin!0 = !{i64 1234} 53b2d3c315SMircea Trofin 54*63293558SMircea Trofin;--- profile.yaml 55*63293558SMircea Trofin- Guid: 1234 56*63293558SMircea Trofin Counters: [6,0,0,0] 57