Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / HotColdSplit / outline-multiple-entry-region.ll
blob5a57211dd74169a1f5448c186252b91ba8bf555f
1 ; RUN: opt -S -passes=hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
3 ; Source:
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 ; }
24 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
25 target triple = "x86_64-apple-macosx10.14.0"
27 ; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.1
28 ; CHECK: call void @_Z10sideeffecti(i32 1)
30 ; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.2
31 ; CHECK: call void @_Z10sideeffecti(i32 0)
33 ; CHECK-LABEL: define {{.*}}@_Z3fooii.cold.3
34 ; CHECK: call void @_Z4sinkv
35 ; CHECK: call void @_Z10sideeffecti(i32 3)
37 define 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
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
49 ; <label>:8:                                      ; preds = %5
50   call void @_Z10sideeffecti(i32 0)
51   br label %14
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
58 ; <label>:12:                                     ; preds = %9
59   call void @_Z10sideeffecti(i32 1)
60   br label %14
62 ; <label>:13:                                     ; preds = %9
63   call void @_Z10sideeffecti(i32 2)
64   br label %15
66 ; <label>:14:                                     ; preds = %12, %8
67   call void @_Z4sinkv() #3
68   call void @_Z10sideeffecti(i32 3)
69   br label %15
71 ; <label>:15:                                     ; preds = %14, %13
72   ret void
75 declare void @_Z10sideeffecti(i32)
77 declare void @_Z4sinkv() cold