Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / llvm.memcpy.ll
blob6b054556135156f0af98d42eb337f55490746906
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-- -verify-machineinstrs -mem-intrinsic-expand-size=19 %s -o - | FileCheck -check-prefix=LOOP %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-- -verify-machineinstrs -mem-intrinsic-expand-size=21 %s -o - | FileCheck -check-prefix=UNROLL %s
5 declare void @llvm.memcpy.p1.p1.i32(ptr addrspace(1), ptr addrspace(1), i32, i1 immarg)
7 define amdgpu_cs void @memcpy_p1i8(ptr addrspace(1) %dst, ptr addrspace(1) %src) {
8 ; LOOP-LABEL: memcpy_p1i8:
9 ; LOOP:       ; %bb.0:
10 ; LOOP-NEXT:    s_mov_b32 s6, 0
11 ; LOOP-NEXT:    s_mov_b32 s7, 0xf000
12 ; LOOP-NEXT:    s_mov_b64 s[4:5], 0
13 ; LOOP-NEXT:    v_mov_b32_e32 v5, v3
14 ; LOOP-NEXT:    v_mov_b32_e32 v4, v2
15 ; LOOP-NEXT:    v_mov_b32_e32 v7, v1
16 ; LOOP-NEXT:    v_mov_b32_e32 v6, v0
17 ; LOOP-NEXT:    v_mov_b32_e32 v8, s6
18 ; LOOP-NEXT:  .LBB0_1: ; %load-store-loop
19 ; LOOP-NEXT:    ; =>This Inner Loop Header: Depth=1
20 ; LOOP-NEXT:    buffer_load_ubyte v9, v[4:5], s[4:7], 0 addr64
21 ; LOOP-NEXT:    s_waitcnt expcnt(6)
22 ; LOOP-NEXT:    buffer_load_ubyte v10, v[4:5], s[4:7], 0 addr64 offset:1
23 ; LOOP-NEXT:    s_waitcnt expcnt(3)
24 ; LOOP-NEXT:    buffer_load_ubyte v11, v[4:5], s[4:7], 0 addr64 offset:2
25 ; LOOP-NEXT:    s_waitcnt expcnt(0)
26 ; LOOP-NEXT:    buffer_load_ubyte v12, v[4:5], s[4:7], 0 addr64 offset:3
27 ; LOOP-NEXT:    buffer_load_ubyte v13, v[4:5], s[4:7], 0 addr64 offset:4
28 ; LOOP-NEXT:    buffer_load_ubyte v14, v[4:5], s[4:7], 0 addr64 offset:5
29 ; LOOP-NEXT:    buffer_load_ubyte v15, v[4:5], s[4:7], 0 addr64 offset:6
30 ; LOOP-NEXT:    buffer_load_ubyte v16, v[4:5], s[4:7], 0 addr64 offset:7
31 ; LOOP-NEXT:    buffer_load_ubyte v17, v[4:5], s[4:7], 0 addr64 offset:8
32 ; LOOP-NEXT:    buffer_load_ubyte v18, v[4:5], s[4:7], 0 addr64 offset:9
33 ; LOOP-NEXT:    buffer_load_ubyte v19, v[4:5], s[4:7], 0 addr64 offset:10
34 ; LOOP-NEXT:    buffer_load_ubyte v20, v[4:5], s[4:7], 0 addr64 offset:11
35 ; LOOP-NEXT:    buffer_load_ubyte v21, v[4:5], s[4:7], 0 addr64 offset:12
36 ; LOOP-NEXT:    buffer_load_ubyte v22, v[4:5], s[4:7], 0 addr64 offset:13
37 ; LOOP-NEXT:    buffer_load_ubyte v23, v[4:5], s[4:7], 0 addr64 offset:14
38 ; LOOP-NEXT:    buffer_load_ubyte v24, v[4:5], s[4:7], 0 addr64 offset:15
39 ; LOOP-NEXT:    v_add_i32_e32 v8, vcc, 1, v8
40 ; LOOP-NEXT:    s_xor_b64 s[0:1], vcc, -1
41 ; LOOP-NEXT:    s_xor_b64 s[0:1], s[0:1], -1
42 ; LOOP-NEXT:    s_and_b64 vcc, s[0:1], exec
43 ; LOOP-NEXT:    s_waitcnt vmcnt(14)
44 ; LOOP-NEXT:    v_lshlrev_b32_e32 v10, 8, v10
45 ; LOOP-NEXT:    s_waitcnt vmcnt(12)
46 ; LOOP-NEXT:    v_lshlrev_b32_e32 v12, 24, v12
47 ; LOOP-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
48 ; LOOP-NEXT:    s_waitcnt vmcnt(10)
49 ; LOOP-NEXT:    v_lshlrev_b32_e32 v14, 8, v14
50 ; LOOP-NEXT:    s_waitcnt vmcnt(8)
51 ; LOOP-NEXT:    v_lshlrev_b32_e32 v16, 24, v16
52 ; LOOP-NEXT:    v_lshlrev_b32_e32 v15, 16, v15
53 ; LOOP-NEXT:    s_waitcnt vmcnt(6)
54 ; LOOP-NEXT:    v_lshlrev_b32_e32 v18, 8, v18
55 ; LOOP-NEXT:    s_waitcnt vmcnt(4)
56 ; LOOP-NEXT:    v_lshlrev_b32_e32 v20, 24, v20
57 ; LOOP-NEXT:    v_lshlrev_b32_e32 v19, 16, v19
58 ; LOOP-NEXT:    s_waitcnt vmcnt(2)
59 ; LOOP-NEXT:    v_lshlrev_b32_e32 v22, 8, v22
60 ; LOOP-NEXT:    s_waitcnt vmcnt(0)
61 ; LOOP-NEXT:    v_lshlrev_b32_e32 v24, 24, v24
62 ; LOOP-NEXT:    v_lshlrev_b32_e32 v23, 16, v23
63 ; LOOP-NEXT:    v_or_b32_e32 v9, v10, v9
64 ; LOOP-NEXT:    v_or_b32_e32 v10, v12, v11
65 ; LOOP-NEXT:    v_or_b32_e32 v11, v14, v13
66 ; LOOP-NEXT:    v_or_b32_e32 v12, v16, v15
67 ; LOOP-NEXT:    v_or_b32_e32 v13, v18, v17
68 ; LOOP-NEXT:    v_or_b32_e32 v14, v20, v19
69 ; LOOP-NEXT:    v_or_b32_e32 v15, v22, v21
70 ; LOOP-NEXT:    v_or_b32_e32 v16, v24, v23
71 ; LOOP-NEXT:    v_or_b32_e32 v9, v10, v9
72 ; LOOP-NEXT:    v_or_b32_e32 v10, v12, v11
73 ; LOOP-NEXT:    v_or_b32_e32 v11, v14, v13
74 ; LOOP-NEXT:    v_or_b32_e32 v12, v16, v15
75 ; LOOP-NEXT:    v_lshrrev_b32_e32 v13, 16, v9
76 ; LOOP-NEXT:    v_bfe_u32 v14, v9, 8, 8
77 ; LOOP-NEXT:    buffer_store_byte v9, v[6:7], s[4:7], 0 addr64
78 ; LOOP-NEXT:    s_waitcnt expcnt(0)
79 ; LOOP-NEXT:    v_lshrrev_b32_e32 v9, 24, v9
80 ; LOOP-NEXT:    v_lshrrev_b32_e32 v15, 16, v10
81 ; LOOP-NEXT:    v_bfe_u32 v16, v10, 8, 8
82 ; LOOP-NEXT:    buffer_store_byte v10, v[6:7], s[4:7], 0 addr64 offset:4
83 ; LOOP-NEXT:    s_waitcnt expcnt(0)
84 ; LOOP-NEXT:    v_lshrrev_b32_e32 v10, 24, v10
85 ; LOOP-NEXT:    v_lshrrev_b32_e32 v17, 16, v11
86 ; LOOP-NEXT:    v_bfe_u32 v18, v11, 8, 8
87 ; LOOP-NEXT:    buffer_store_byte v11, v[6:7], s[4:7], 0 addr64 offset:8
88 ; LOOP-NEXT:    s_waitcnt expcnt(0)
89 ; LOOP-NEXT:    v_lshrrev_b32_e32 v11, 24, v11
90 ; LOOP-NEXT:    v_lshrrev_b32_e32 v19, 16, v12
91 ; LOOP-NEXT:    v_bfe_u32 v20, v12, 8, 8
92 ; LOOP-NEXT:    buffer_store_byte v12, v[6:7], s[4:7], 0 addr64 offset:12
93 ; LOOP-NEXT:    s_waitcnt expcnt(0)
94 ; LOOP-NEXT:    v_lshrrev_b32_e32 v12, 24, v12
95 ; LOOP-NEXT:    buffer_store_byte v14, v[6:7], s[4:7], 0 addr64 offset:1
96 ; LOOP-NEXT:    buffer_store_byte v13, v[6:7], s[4:7], 0 addr64 offset:2
97 ; LOOP-NEXT:    buffer_store_byte v9, v[6:7], s[4:7], 0 addr64 offset:3
98 ; LOOP-NEXT:    buffer_store_byte v16, v[6:7], s[4:7], 0 addr64 offset:5
99 ; LOOP-NEXT:    buffer_store_byte v15, v[6:7], s[4:7], 0 addr64 offset:6
100 ; LOOP-NEXT:    buffer_store_byte v10, v[6:7], s[4:7], 0 addr64 offset:7
101 ; LOOP-NEXT:    buffer_store_byte v18, v[6:7], s[4:7], 0 addr64 offset:9
102 ; LOOP-NEXT:    buffer_store_byte v17, v[6:7], s[4:7], 0 addr64 offset:10
103 ; LOOP-NEXT:    buffer_store_byte v11, v[6:7], s[4:7], 0 addr64 offset:11
104 ; LOOP-NEXT:    buffer_store_byte v20, v[6:7], s[4:7], 0 addr64 offset:13
105 ; LOOP-NEXT:    buffer_store_byte v19, v[6:7], s[4:7], 0 addr64 offset:14
106 ; LOOP-NEXT:    buffer_store_byte v12, v[6:7], s[4:7], 0 addr64 offset:15
107 ; LOOP-NEXT:    v_add_i32_e64 v6, s[0:1], 16, v6
108 ; LOOP-NEXT:    v_addc_u32_e64 v7, s[0:1], 0, v7, s[0:1]
109 ; LOOP-NEXT:    v_add_i32_e64 v4, s[0:1], 16, v4
110 ; LOOP-NEXT:    v_addc_u32_e64 v5, s[0:1], 0, v5, s[0:1]
111 ; LOOP-NEXT:    s_cbranch_vccnz .LBB0_1
112 ; LOOP-NEXT:  ; %bb.2: ; %memcpy-split
113 ; LOOP-NEXT:    s_mov_b32 s2, 0
114 ; LOOP-NEXT:    s_mov_b32 s3, 0xf000
115 ; LOOP-NEXT:    s_mov_b64 s[0:1], 0
116 ; LOOP-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:17
117 ; LOOP-NEXT:    buffer_load_ubyte v5, v[2:3], s[0:3], 0 addr64 offset:19
118 ; LOOP-NEXT:    buffer_load_ubyte v6, v[2:3], s[0:3], 0 addr64 offset:18
119 ; LOOP-NEXT:    buffer_load_ubyte v2, v[2:3], s[0:3], 0 addr64 offset:16
120 ; LOOP-NEXT:    s_waitcnt vmcnt(3)
121 ; LOOP-NEXT:    v_lshlrev_b32_e32 v3, 8, v4
122 ; LOOP-NEXT:    s_waitcnt vmcnt(2)
123 ; LOOP-NEXT:    v_lshlrev_b32_e32 v4, 24, v5
124 ; LOOP-NEXT:    s_waitcnt vmcnt(1)
125 ; LOOP-NEXT:    v_lshlrev_b32_e32 v5, 16, v6
126 ; LOOP-NEXT:    s_waitcnt vmcnt(0)
127 ; LOOP-NEXT:    v_or_b32_e32 v2, v3, v2
128 ; LOOP-NEXT:    v_or_b32_e32 v3, v4, v5
129 ; LOOP-NEXT:    v_or_b32_e32 v2, v3, v2
130 ; LOOP-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
131 ; LOOP-NEXT:    v_bfe_u32 v4, v2, 8, 8
132 ; LOOP-NEXT:    buffer_store_byte v2, v[0:1], s[0:3], 0 addr64 offset:16
133 ; LOOP-NEXT:    s_waitcnt expcnt(0)
134 ; LOOP-NEXT:    v_lshrrev_b32_e32 v2, 24, v2
135 ; LOOP-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:17
136 ; LOOP-NEXT:    buffer_store_byte v3, v[0:1], s[0:3], 0 addr64 offset:18
137 ; LOOP-NEXT:    buffer_store_byte v2, v[0:1], s[0:3], 0 addr64 offset:19
138 ; LOOP-NEXT:    s_endpgm
140 ; UNROLL-LABEL: memcpy_p1i8:
141 ; UNROLL:       ; %bb.0:
142 ; UNROLL-NEXT:    s_mov_b32 s2, 0
143 ; UNROLL-NEXT:    s_mov_b32 s3, 0xf000
144 ; UNROLL-NEXT:    s_mov_b64 s[0:1], 0
145 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64
146 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
147 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64
148 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
149 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:1
150 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
151 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:1
152 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
153 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:2
154 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
155 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:2
156 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
157 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:3
158 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
159 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:3
160 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
161 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:4
162 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
163 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:4
164 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
165 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:5
166 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
167 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:5
168 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
169 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:6
170 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
171 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:6
172 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
173 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:7
174 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
175 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:7
176 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
177 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:8
178 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
179 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:8
180 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
181 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:9
182 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
183 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:9
184 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
185 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:10
186 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
187 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:10
188 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
189 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:11
190 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
191 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:11
192 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
193 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:12
194 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
195 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:12
196 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
197 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:13
198 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
199 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:13
200 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
201 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:14
202 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
203 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:14
204 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
205 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:15
206 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
207 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:15
208 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
209 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:16
210 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
211 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:16
212 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
213 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:17
214 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
215 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:17
216 ; UNROLL-NEXT:    s_waitcnt expcnt(0)
217 ; UNROLL-NEXT:    buffer_load_ubyte v4, v[2:3], s[0:3], 0 addr64 offset:18
218 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
219 ; UNROLL-NEXT:    buffer_store_byte v4, v[0:1], s[0:3], 0 addr64 offset:18
220 ; UNROLL-NEXT:    buffer_load_ubyte v2, v[2:3], s[0:3], 0 addr64 offset:19
221 ; UNROLL-NEXT:    s_waitcnt vmcnt(0)
222 ; UNROLL-NEXT:    buffer_store_byte v2, v[0:1], s[0:3], 0 addr64 offset:19
223 ; UNROLL-NEXT:    s_endpgm
224   call void @llvm.memcpy.p1.p1.i32(ptr addrspace(1) %dst, ptr addrspace(1) %src, i32 20, i1 false)
225   ret void