18658cf99SFangrui Song; RUN: opt < %s -passes=instrprof -S -do-counter-promotion=1 -skip-ret-exit-block=1 | FileCheck %s --check-prefixes=CHECK,SKIP 28658cf99SFangrui Song; RUN: opt < %s -passes=instrprof -S -do-counter-promotion=1 -skip-ret-exit-block=0 | FileCheck %s --check-prefixes=CHECK,NOTSKIP 331bd15c5SRong Xu 431bd15c5SRong Xu$__llvm_profile_raw_version = comdat any 531bd15c5SRong Xu 631bd15c5SRong Xu@bar = dso_local local_unnamed_addr global i32 0, align 4 731bd15c5SRong Xu@__llvm_profile_raw_version = constant i64 72057594037927941, comdat 831bd15c5SRong Xu@__profn_foo = private constant [3 x i8] c"foo" 931bd15c5SRong Xu 1031bd15c5SRong Xudefine dso_local void @foo(i32 %n) { 1131bd15c5SRong Xuentry: 12*9ff36df5SFangrui Song call void @llvm.instrprof.increment(ptr @__profn_foo, i64 29212902728, i32 2, i32 1) 1331bd15c5SRong Xu br label %for.cond 1431bd15c5SRong Xu 1531bd15c5SRong Xufor.cond: 1631bd15c5SRong Xu %i.0 = phi i32 [ 0, %entry ], [ %inc, %if.end ] 1731bd15c5SRong Xu %cmp = icmp slt i32 %i.0, %n 18*9ff36df5SFangrui Song %0 = load i32, ptr @bar, align 4 1931bd15c5SRong Xu %tobool.not = icmp eq i32 %0, 0 2031bd15c5SRong Xu %or.cond = and i1 %cmp, %tobool.not 2131bd15c5SRong Xu br i1 %or.cond, label %if.end, label %cleanup 2231bd15c5SRong Xu 2331bd15c5SRong Xuif.end: 24*9ff36df5SFangrui Song call void @llvm.instrprof.increment(ptr @__profn_foo, i64 29212902728, i32 2, i32 0) 2531bd15c5SRong Xu call void (...) @bar2() 2631bd15c5SRong Xu %inc = add nuw nsw i32 %i.0, 1 2731bd15c5SRong Xu br label %for.cond 2831bd15c5SRong Xu 2931bd15c5SRong Xucleanup: 3031bd15c5SRong Xu; CHECK: cleanup: 3131bd15c5SRong Xu; SKIP-NOT: %pgocount.promoted 3231bd15c5SRong Xu; NOTSKIP: %pgocount.promoted 3331bd15c5SRong Xu ret void 3431bd15c5SRong Xu} 3531bd15c5SRong Xu 3631bd15c5SRong Xudeclare dso_local void @bar2(...) 3731bd15c5SRong Xu 38*9ff36df5SFangrui Songdeclare void @llvm.instrprof.increment(ptr, i64, i32, i32) 39