1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --include-generated-funcs
2; RUN: llc -enable-machine-outliner -mtriple=amdgcn-adm-amdhsa < %s | FileCheck %s
3
4; NOTE: Machine outliner doesn't run.
5@x = dso_local global i32 0, align 4
6
7define dso_local i32 @check_boundaries() #0 {
8  %1 = alloca i32, align 4, addrspace(5)
9  %2 = alloca i32, align 4, addrspace(5)
10  %3 = alloca i32, align 4, addrspace(5)
11  %4 = alloca i32, align 4, addrspace(5)
12  %5 = alloca i32, align 4, addrspace(5)
13  store i32 0, i32 addrspace(5)* %1, align 4
14  store i32 0, i32 addrspace(5)* %2, align 4
15  %6 = load i32, i32 addrspace(5)* %2, align 4
16  %7 = icmp ne i32 %6, 0
17  br i1 %7, label %9, label %8
18
19  store i32 1, i32 addrspace(5)* %2, align 4
20  store i32 2, i32 addrspace(5)* %3, align 4
21  store i32 3, i32 addrspace(5)* %4, align 4
22  store i32 4, i32 addrspace(5)* %5, align 4
23  br label %10
24
25  store i32 1, i32 addrspace(5)* %4, align 4
26  br label %10
27
28  %11 = load i32, i32 addrspace(5)* %2, align 4
29  %12 = icmp ne i32 %11, 0
30  br i1 %12, label %14, label %13
31
32  store i32 1, i32 addrspace(5)* %2, align 4
33  store i32 2, i32 addrspace(5)* %3, align 4
34  store i32 3, i32 addrspace(5)* %4, align 4
35  store i32 4, i32 addrspace(5)* %5, align 4
36  br label %15
37
38  store i32 1, i32 addrspace(5)* %4, align 4
39  br label %15
40
41  ret i32 0
42}
43
44define dso_local i32 @main() #0 {
45  %1 = alloca i32, align 4, addrspace(5)
46  %2 = alloca i32, align 4, addrspace(5)
47  %3 = alloca i32, align 4, addrspace(5)
48  %4 = alloca i32, align 4, addrspace(5)
49  %5 = alloca i32, align 4, addrspace(5)
50
51  store i32 0, i32 addrspace(5)* %1, align 4
52  store i32 0, i32* @x, align 4
53  store i32 1, i32 addrspace(5)* %2, align 4
54  store i32 2, i32 addrspace(5)* %3, align 4
55  store i32 3, i32 addrspace(5)* %4, align 4
56  store i32 4, i32 addrspace(5)* %5, align 4
57  store i32 1, i32* @x, align 4
58  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
59  store i32 1, i32 addrspace(5)* %2, align 4
60  store i32 2, i32 addrspace(5)* %3, align 4
61  store i32 3, i32 addrspace(5)* %4, align 4
62  store i32 4, i32 addrspace(5)* %5, align 4
63  ret i32 0
64}
65
66attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }
67; CHECK-LABEL: check_boundaries:
68; CHECK:       check_boundaries$local:
69; CHECK-NEXT:  ; %bb.0:
70; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
71; CHECK-NEXT:    s_mov_b32 s4, s33
72; CHECK-NEXT:    s_mov_b32 s33, s32
73; CHECK-NEXT:    v_mov_b32_e32 v0, 0
74; CHECK-NEXT:    s_mov_b32 s33, s4
75; CHECK-NEXT:    s_setpc_b64 s[30:31]
76;
77; CHECK-LABEL: main:
78; CHECK:       main$local:
79; CHECK-NEXT:  ; %bb.0:
80; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
81; CHECK-NEXT:    s_mov_b32 s6, s33
82; CHECK-NEXT:    s_mov_b32 s33, s32
83; CHECK-NEXT:    s_getpc_b64 s[4:5]
84; CHECK-NEXT:    s_add_u32 s4, s4, x@rel32@lo+4
85; CHECK-NEXT:    s_addc_u32 s5, s5, x@rel32@hi+12
86; CHECK-NEXT:    v_mov_b32_e32 v2, 1
87; CHECK-NEXT:    v_mov_b32_e32 v0, s4
88; CHECK-NEXT:    v_mov_b32_e32 v1, s5
89; CHECK-NEXT:    flat_store_dword v[0:1], v2
90; CHECK-NEXT:    ;;#ASMSTART
91; CHECK-NEXT:    ;;#ASMEND
92; CHECK-NEXT:    v_mov_b32_e32 v0, 0
93; CHECK-NEXT:    s_mov_b32 s33, s6
94; CHECK-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
95; CHECK-NEXT:    s_setpc_b64 s[30:31]
96