| ; RUN: opt < %s -instrprof -S -o - -do-counter-promotion=1 -skip-ret-exit-block=1 | FileCheck %s --check-prefixes=CHECK,SKIP |
| ; RUN: opt < %s -instrprof -S -o - -do-counter-promotion=1 -skip-ret-exit-block=0 | FileCheck %s --check-prefixes=CHECK,NOTSKIP |
| |
| $__llvm_profile_raw_version = comdat any |
| |
| @bar = dso_local local_unnamed_addr global i32 0, align 4 |
| @__llvm_profile_raw_version = constant i64 72057594037927941, comdat |
| @__profn_foo = private constant [3 x i8] c"foo" |
| |
| define dso_local void @foo(i32 %n) { |
| entry: |
| call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__profn_foo, i32 0, i32 0), i64 29212902728, i32 2, i32 1) |
| br label %for.cond |
| |
| for.cond: |
| %i.0 = phi i32 [ 0, %entry ], [ %inc, %if.end ] |
| %cmp = icmp slt i32 %i.0, %n |
| %0 = load i32, i32* @bar, align 4 |
| %tobool.not = icmp eq i32 %0, 0 |
| %or.cond = and i1 %cmp, %tobool.not |
| br i1 %or.cond, label %if.end, label %cleanup |
| |
| if.end: |
| call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__profn_foo, i32 0, i32 0), i64 29212902728, i32 2, i32 0) |
| call void (...) @bar2() |
| %inc = add nuw nsw i32 %i.0, 1 |
| br label %for.cond |
| |
| cleanup: |
| ; CHECK: cleanup: |
| ; SKIP-NOT: %pgocount.promoted |
| ; NOTSKIP: %pgocount.promoted |
| ret void |
| } |
| |
| declare dso_local void @bar2(...) |
| |
| declare void @llvm.instrprof.increment(i8*, i64, i32, i32) |