xref: /llvm-project/llvm/test/Transforms/PGOProfile/maxcountzero.ll (revision a74c5707be279bdddb51fe49aa9383c1ddc99fbe)
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