brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · f9877ca Raw
173 lines · plain
1; RUN: opt < %s -passes=pgo-instr-gen -pgo-function-entry-coverage -S | FileCheck %s --implicit-check-not="instrprof.cover" --check-prefixes=CHECK,GEN,ENTRY2; RUN: opt < %s -passes=pgo-instr-gen -pgo-block-coverage -S | FileCheck %s --implicit-check-not="instrprof.cover" --check-prefixes=CHECK,GEN,BLOCK3 4; RUN: llvm-profdata merge %S/Inputs/coverage.proftext -o %t.profdata5; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s --check-prefixes=CHECK,USE6target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"7target triple = "x86_64-unknown-linux-gnu"8 9; CHECK-LABEL: @foo()10; USE-SAME: !prof ![[HOT:[0-9]+]]11define void @foo() {12; CHECK-LABEL: entry:13entry:14  ; ENTRY: call void @llvm.instrprof.cover({{.*}})15  %c = call i1 @choice()16  br i1 %c, label %if.then, label %if.else17  ; USE: br i1 %c, label %if.then, label %if.else, !prof ![[WEIGHTS0:[0-9]+]]18 19; CHECK-LABEL: if.then:20if.then:21  ; BLOCK: call void @llvm.instrprof.cover({{.*}})22  br label %if.end23 24; CHECK-LABEL: if.else:25if.else:26  ; BLOCK: call void @llvm.instrprof.cover({{.*}})27  br label %if.end28 29; CHECK-LABEL: if.end:30if.end:31  ret void32}33 34; CHECK-LABEL: @bar()35; USE-SAME: !prof ![[HOT:[0-9]+]]36define void @bar() {37; CHECK-LABEL: entry:38entry:39  ; ENTRY: call void @llvm.instrprof.cover({{.*}})40  %c = call i1 @choice()41  br i1 %c, label %if.then, label %if.end42  ; USE: br i1 %c, label %if.then, label %if.end, !prof ![[WEIGHTS1:[0-9]+]]43 44; CHECK-LABEL: if.then:45if.then:46  ; BLOCK: call void @llvm.instrprof.cover({{.*}})47  br label %if.end48 49; CHECK-LABEL: if.end:50if.end:51  ; BLOCK: call void @llvm.instrprof.cover({{.*}})52  ret void53}54 55; CHECK-LABEL: @goo()56; USE-SAME: !prof ![[HOT:[0-9]+]]57define void @goo() {58; CHECK-LABEL: entry:59entry:60  ; GEN: call void @llvm.instrprof.cover({{.*}})61  ret void62}63 64; CHECK-LABEL: @loop()65; USE-SAME: !prof ![[HOT:[0-9]+]]66define void @loop() {67; CHECK-LABEL: entry:68entry:69  ; GEN: call void @llvm.instrprof.cover({{.*}})70  br label %while71while:72  ; BLOCK: call void @llvm.instrprof.cover({{.*}})73  br label %while74}75 76; CHECK-LABEL: @hoo(77; USE-SAME: !prof ![[HOT:[0-9]+]]78define void @hoo(i32 %a) #0 {79; CHECK-LABEL: entry:80entry:81  ; ENTRY: call void @llvm.instrprof.cover({{.*}})82  %a.addr = alloca i32, align 483  %i = alloca i32, align 484  store i32 %a, ptr %a.addr, align 485  %0 = load i32, ptr %a.addr, align 486  %rem = srem i32 %0, 287  %cmp = icmp eq i32 %rem, 088  br i1 %cmp, label %if.then, label %if.else89  ; USE: br i1 %cmp, label %if.then, label %if.else, !prof ![[WEIGHTS1]]90 91; CHECK-LABEL: if.then:92if.then:                                          ; preds = %entry93  ; BLOCK: call void @llvm.instrprof.cover({{.*}})94  br label %if.end95 96; CHECK-LABEL: if.else:97if.else:                                          ; preds = %entry98  ; BLOCK: call void @llvm.instrprof.cover({{.*}})99  br label %if.end100 101; CHECK-LABEL: if.end:102if.end:                                           ; preds = %if.else, %if.then103  store i32 1, ptr %i, align 4104  br label %for.cond105 106; CHECK-LABEL: for.cond:107for.cond:                                         ; preds = %for.inc, %if.end108  %1 = load i32, ptr %i, align 4109  %2 = load i32, ptr %a.addr, align 4110  %cmp1 = icmp slt i32 %1, %2111  br i1 %cmp1, label %for.body, label %for.end112  ; USE: br i1 %cmp1, label %for.body, label %for.end, !prof ![[WEIGHTS1]]113 114; CHECK-LABEL: for.body:115for.body:                                         ; preds = %for.cond116  %3 = load i32, ptr %a.addr, align 4117  %rem2 = srem i32 %3, 3118  %cmp3 = icmp eq i32 %rem2, 0119  br i1 %cmp3, label %if.then4, label %if.else5120  ; USE: br i1 %cmp3, label %if.then4, label %if.else5, !prof ![[WEIGHTS0]]121 122; CHECK-LABEL: if.then4:123if.then4:                                         ; preds = %for.body124  ; BLOCK: call void @llvm.instrprof.cover({{.*}})125  br label %if.end10126 127; CHECK-LABEL: if.else5:128if.else5:                                         ; preds = %for.body129  %4 = load i32, ptr %a.addr, align 4130  %rem6 = srem i32 %4, 1001131  %cmp7 = icmp eq i32 %rem6, 0132  br i1 %cmp7, label %if.then8, label %if.end9133  ; USE: br i1 %cmp7, label %if.then8, label %if.end9, !prof ![[WEIGHTS1]]134 135; CHECK-LABEL: if.then8:136if.then8:                                         ; preds = %if.else5137  ; BLOCK: call void @llvm.instrprof.cover({{.*}})138  br label %return139 140; CHECK-LABEL: if.end9:141if.end9:                                          ; preds = %if.else5142  ; BLOCK: call void @llvm.instrprof.cover({{.*}})143  br label %if.end10144 145; CHECK-LABEL: if.end10:146if.end10:                                         ; preds = %if.end9, %if.then4147  br label %for.inc148 149; CHECK-LABEL: for.inc:150for.inc:                                          ; preds = %if.end10151  %5 = load i32, ptr %i, align 4152  %inc = add nsw i32 %5, 1153  store i32 %inc, ptr %i, align 4154  br label %for.cond155 156; CHECK-LABEL: for.end:157for.end:                                          ; preds = %for.cond158  ; BLOCK: call void @llvm.instrprof.cover({{.*}})159  br label %return160 161; CHECK-LABEL: return:162return:                                           ; preds = %for.end, %if.then8163  ret void164}165 166declare i1 @choice()167 168; GEN: declare void @llvm.instrprof.cover({{.*}})169 170; USE-DAG: ![[HOT]] = !{!"function_entry_count", i64 10000}171; USE-DAG: ![[WEIGHTS0]] = !{!"branch_weights", i32 1, i32 1}172; USE-DAG: ![[WEIGHTS1]] = !{!"branch_weights", i32 1, i32 0}173