1*b43a1d1bSWolfgang Pieb; Make sure a profile that is generated from a function without an exit node 2*b43a1d1bSWolfgang Pieb; does not cause an assertion. The profile consists of a non-zero count in a 3*b43a1d1bSWolfgang Pieb; basic block and 0 counts in all succcessor blocks. Expect a warning. 4*b43a1d1bSWolfgang Pieb 5*b43a1d1bSWolfgang Pieb; RUN: llvm-profdata merge %S/Inputs/maxcountzero.proftext -o %t.profdata 6*b43a1d1bSWolfgang Pieb; RUN: opt < %s -passes=pgo-instr-use -pgo-instrument-entry=false -pgo-test-profile-file=%t.profdata -S 2>&1 | FileCheck %s 7*b43a1d1bSWolfgang Pieb 8*b43a1d1bSWolfgang Piebdefine void @bar(i32 noundef %s) { 9*b43a1d1bSWolfgang Piebentry: 10*b43a1d1bSWolfgang Pieb %cmp = icmp sgt i32 %s, 20 11*b43a1d1bSWolfgang Pieb br i1 %cmp, label %if.then, label %if.end 12*b43a1d1bSWolfgang Pieb 13*b43a1d1bSWolfgang Piebif.then: 14*b43a1d1bSWolfgang Pieb call void @exit(i32 noundef 1) 15*b43a1d1bSWolfgang Pieb unreachable 16*b43a1d1bSWolfgang Pieb 17*b43a1d1bSWolfgang Piebif.end: 18*b43a1d1bSWolfgang Pieb ret void 19*b43a1d1bSWolfgang Pieb} 20*b43a1d1bSWolfgang Pieb 21*b43a1d1bSWolfgang Piebdeclare void @exit(i32 noundef) 22*b43a1d1bSWolfgang Pieb 23*b43a1d1bSWolfgang Piebdefine void @foo(i32 noundef %n) { 24*b43a1d1bSWolfgang Piebentry: 25*b43a1d1bSWolfgang Pieb %sum = alloca i32, align 4 26*b43a1d1bSWolfgang Pieb store volatile i32 %n, ptr %sum, align 4 27*b43a1d1bSWolfgang Pieb %sum.0.sum.0. = load volatile i32, ptr %sum, align 4 28*b43a1d1bSWolfgang Pieb call void @bar(i32 noundef %sum.0.sum.0.) 29*b43a1d1bSWolfgang Pieb %cmp = icmp slt i32 %n, 10 30*b43a1d1bSWolfgang Pieb br i1 %cmp, label %if.then, label %if.end 31*b43a1d1bSWolfgang Pieb 32*b43a1d1bSWolfgang Piebif.then: 33*b43a1d1bSWolfgang Pieb %sum.0.sum.0.1 = load volatile i32, ptr %sum, align 4 34*b43a1d1bSWolfgang Pieb call void @bar(i32 noundef %sum.0.sum.0.1) 35*b43a1d1bSWolfgang Pieb br label %if.end 36*b43a1d1bSWolfgang Pieb 37*b43a1d1bSWolfgang Piebif.end: 38*b43a1d1bSWolfgang Pieb br label %for.cond 39*b43a1d1bSWolfgang Pieb 40*b43a1d1bSWolfgang Piebfor.cond: 41*b43a1d1bSWolfgang Pieb %sum.0.sum.0.2 = load volatile i32, ptr %sum, align 4 42*b43a1d1bSWolfgang Pieb call void @bar(i32 noundef %sum.0.sum.0.2) 43*b43a1d1bSWolfgang Pieb br label %for.cond 44*b43a1d1bSWolfgang Pieb} 45*b43a1d1bSWolfgang Pieb 46*b43a1d1bSWolfgang Pieb; CHECK: warning:{{.*}}Profile in foo partially ignored 47*b43a1d1bSWolfgang Pieb; CHECK: define 48