xref: /llvm-project/llvm/test/Transforms/HotColdSplit/outline-multiple-entry-region.ll (revision 4d211ac84212cbf1ea8b98584df585df781c6557)
1; RUN: opt -S -passes=hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
2
3; Source:
4;
5; extern __attribute__((cold)) void sink();
6; extern void sideeffect(int);
7; void foo(int cond1, int cond2) {
8;     while (true) {
9;         if (cond1) {
10;             sideeffect(0); // This is cold (it reaches sink()).
11;             break;
12;         }
13;         if (cond2) {
14;             sideeffect(1); // This is cold (it reaches sink()).
15;             break;
16;         }
17;         sideeffect(2);
18;         return;
19;     }
20;     sink();
21;     sideeffect(3);
22; }
23
24target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
25target triple = "x86_64-apple-macosx10.14.0"
26
27; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.1
28; CHECK: call void @_Z10sideeffecti(i32 1)
29
30; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.2
31; CHECK: call void @_Z10sideeffecti(i32 0)
32
33; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.3
34; CHECK: call void @_Z4sinkv
35; CHECK: call void @_Z10sideeffecti(i32 3)
36
37define void @_Z3fooii(i32, i32) {
38  %3 = alloca i32, align 4
39  %4 = alloca i32, align 4
40  store i32 %0, ptr %3, align 4
41  store i32 %1, ptr %4, align 4
42  br label %5
43
44; <label>:5:                                      ; preds = %2
45  %6 = load i32, ptr %3, align 4
46  %7 = icmp ne i32 %6, 0
47  br i1 %7, label %8, label %9
48
49; <label>:8:                                      ; preds = %5
50  call void @_Z10sideeffecti(i32 0)
51  br label %14
52
53; <label>:9:                                      ; preds = %5
54  %10 = load i32, ptr %4, align 4
55  %11 = icmp ne i32 %10, 0
56  br i1 %11, label %12, label %13
57
58; <label>:12:                                     ; preds = %9
59  call void @_Z10sideeffecti(i32 1)
60  br label %14
61
62; <label>:13:                                     ; preds = %9
63  call void @_Z10sideeffecti(i32 2)
64  br label %15
65
66; <label>:14:                                     ; preds = %12, %8
67  call void @_Z4sinkv() #3
68  call void @_Z10sideeffecti(i32 3)
69  br label %15
70
71; <label>:15:                                     ; preds = %14, %13
72  ret void
73}
74
75declare void @_Z10sideeffecti(i32)
76
77declare void @_Z4sinkv() cold
78