1 ; RUN: llc -march=amdgcn < %s | FileCheck -check-prefixes=GCN,SI %s
2 ; RUN: llc -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,VI %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
5 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i32:
7 define amdgpu_kernel void @v_test_imax3_sgt_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr, i32 addrspace(1)* %cptr) #0 {
8 %tid = call i32 @llvm.amdgcn.workitem.id.x()
9 %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid
10 %gep1 = getelementptr i32, i32 addrspace(1)* %bptr, i32 %tid
11 %gep2 = getelementptr i32, i32 addrspace(1)* %cptr, i32 %tid
12 %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid
13 %a = load i32, i32 addrspace(1)* %gep0
14 %b = load i32, i32 addrspace(1)* %gep1
15 %c = load i32, i32 addrspace(1)* %gep2
16 %icmp0 = icmp sgt i32 %a, %b
17 %i0 = select i1 %icmp0, i32 %a, i32 %b
18 %icmp1 = icmp sgt i32 %i0, %c
19 %i1 = select i1 %icmp1, i32 %i0, i32 %c
20 store i32 %i1, i32 addrspace(1)* %out
24 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i32:
26 define amdgpu_kernel void @v_test_umax3_ugt_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr, i32 addrspace(1)* %cptr) #0 {
27 %tid = call i32 @llvm.amdgcn.workitem.id.x()
28 %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid
29 %gep1 = getelementptr i32, i32 addrspace(1)* %bptr, i32 %tid
30 %gep2 = getelementptr i32, i32 addrspace(1)* %cptr, i32 %tid
31 %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid
32 %a = load i32, i32 addrspace(1)* %gep0
33 %b = load i32, i32 addrspace(1)* %gep1
34 %c = load i32, i32 addrspace(1)* %gep2
35 %icmp0 = icmp ugt i32 %a, %b
36 %i0 = select i1 %icmp0, i32 %a, i32 %b
37 %icmp1 = icmp ugt i32 %i0, %c
38 %i1 = select i1 %icmp1, i32 %i0, i32 %c
39 store i32 %i1, i32 addrspace(1)* %out
43 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i16:
50 define amdgpu_kernel void @v_test_imax3_sgt_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %aptr, i16 addrspace(1)* %bptr, i16 addrspace(1)* %cptr) #0 {
51 %tid = call i32 @llvm.amdgcn.workitem.id.x()
52 %gep0 = getelementptr i16, i16 addrspace(1)* %aptr, i32 %tid
53 %gep1 = getelementptr i16, i16 addrspace(1)* %bptr, i32 %tid
54 %gep2 = getelementptr i16, i16 addrspace(1)* %cptr, i32 %tid
55 %outgep = getelementptr i16, i16 addrspace(1)* %out, i32 %tid
56 %a = load i16, i16 addrspace(1)* %gep0
57 %b = load i16, i16 addrspace(1)* %gep1
58 %c = load i16, i16 addrspace(1)* %gep2
59 %icmp0 = icmp sgt i16 %a, %b
60 %i0 = select i1 %icmp0, i16 %a, i16 %b
61 %icmp1 = icmp sgt i16 %i0, %c
62 %i1 = select i1 %icmp1, i16 %i0, i16 %c
63 store i16 %i1, i16 addrspace(1)* %out
67 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i16:
74 define amdgpu_kernel void @v_test_umax3_ugt_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %aptr, i16 addrspace(1)* %bptr, i16 addrspace(1)* %cptr) #0 {
75 %tid = call i32 @llvm.amdgcn.workitem.id.x()
76 %gep0 = getelementptr i16, i16 addrspace(1)* %aptr, i32 %tid
77 %gep1 = getelementptr i16, i16 addrspace(1)* %bptr, i32 %tid
78 %gep2 = getelementptr i16, i16 addrspace(1)* %cptr, i32 %tid
79 %outgep = getelementptr i16, i16 addrspace(1)* %out, i32 %tid
80 %a = load i16, i16 addrspace(1)* %gep0
81 %b = load i16, i16 addrspace(1)* %gep1
82 %c = load i16, i16 addrspace(1)* %gep2
83 %icmp0 = icmp ugt i16 %a, %b
84 %i0 = select i1 %icmp0, i16 %a, i16 %b
85 %icmp1 = icmp ugt i16 %i0, %c
86 %i1 = select i1 %icmp1, i16 %i0, i16 %c
87 store i16 %i1, i16 addrspace(1)* %out
91 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i8:
98 define amdgpu_kernel void @v_test_imax3_sgt_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %aptr, i8 addrspace(1)* %bptr, i8 addrspace(1)* %cptr) #0 {
99 %tid = call i32 @llvm.amdgcn.workitem.id.x()
100 %gep0 = getelementptr i8, i8 addrspace(1)* %aptr, i32 %tid
101 %gep1 = getelementptr i8, i8 addrspace(1)* %bptr, i32 %tid
102 %gep2 = getelementptr i8, i8 addrspace(1)* %cptr, i32 %tid
103 %outgep = getelementptr i8, i8 addrspace(1)* %out, i32 %tid
104 %a = load i8, i8 addrspace(1)* %gep0
105 %b = load i8, i8 addrspace(1)* %gep1
106 %c = load i8, i8 addrspace(1)* %gep2
107 %icmp0 = icmp sgt i8 %a, %b
108 %i0 = select i1 %icmp0, i8 %a, i8 %b
109 %icmp1 = icmp sgt i8 %i0, %c
110 %i1 = select i1 %icmp1, i8 %i0, i8 %c
111 store i8 %i1, i8 addrspace(1)* %out
115 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i8:
122 define amdgpu_kernel void @v_test_umax3_ugt_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %aptr, i8 addrspace(1)* %bptr, i8 addrspace(1)* %cptr) #0 {
123 %tid = call i32 @llvm.amdgcn.workitem.id.x()
124 %gep0 = getelementptr i8, i8 addrspace(1)* %aptr, i32 %tid
125 %gep1 = getelementptr i8, i8 addrspace(1)* %bptr, i32 %tid
126 %gep2 = getelementptr i8, i8 addrspace(1)* %cptr, i32 %tid
127 %outgep = getelementptr i8, i8 addrspace(1)* %out, i32 %tid
128 %a = load i8, i8 addrspace(1)* %gep0
129 %b = load i8, i8 addrspace(1)* %gep1
130 %c = load i8, i8 addrspace(1)* %gep2
131 %icmp0 = icmp ugt i8 %a, %b
132 %i0 = select i1 %icmp0, i8 %a, i8 %b
133 %icmp1 = icmp ugt i8 %i0, %c
134 %i1 = select i1 %icmp1, i8 %i0, i8 %c
135 store i8 %i1, i8 addrspace(1)* %out
139 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i7:
146 define amdgpu_kernel void @v_test_imax3_sgt_i7(i7 addrspace(1)* %out, i7 addrspace(1)* %aptr, i7 addrspace(1)* %bptr, i7 addrspace(1)* %cptr) #0 {
147 %tid = call i32 @llvm.amdgcn.workitem.id.x()
148 %gep0 = getelementptr i7, i7 addrspace(1)* %aptr, i32 %tid
149 %gep1 = getelementptr i7, i7 addrspace(1)* %bptr, i32 %tid
150 %gep2 = getelementptr i7, i7 addrspace(1)* %cptr, i32 %tid
151 %outgep = getelementptr i7, i7 addrspace(1)* %out, i32 %tid
152 %a = load i7, i7 addrspace(1)* %gep0
153 %b = load i7, i7 addrspace(1)* %gep1
154 %c = load i7, i7 addrspace(1)* %gep2
155 %icmp0 = icmp sgt i7 %a, %b
156 %i0 = select i1 %icmp0, i7 %a, i7 %b
157 %icmp1 = icmp sgt i7 %i0, %c
158 %i1 = select i1 %icmp1, i7 %i0, i7 %c
159 store i7 %i1, i7 addrspace(1)* %out
163 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i7:
170 define amdgpu_kernel void @v_test_umax3_ugt_i7(i7 addrspace(1)* %out, i7 addrspace(1)* %aptr, i7 addrspace(1)* %bptr, i7 addrspace(1)* %cptr) #0 {
171 %tid = call i32 @llvm.amdgcn.workitem.id.x()
172 %gep0 = getelementptr i7, i7 addrspace(1)* %aptr, i32 %tid
173 %gep1 = getelementptr i7, i7 addrspace(1)* %bptr, i32 %tid
174 %gep2 = getelementptr i7, i7 addrspace(1)* %cptr, i32 %tid
175 %outgep = getelementptr i7, i7 addrspace(1)* %out, i32 %tid
176 %a = load i7, i7 addrspace(1)* %gep0
177 %b = load i7, i7 addrspace(1)* %gep1
178 %c = load i7, i7 addrspace(1)* %gep2
179 %icmp0 = icmp ugt i7 %a, %b
180 %i0 = select i1 %icmp0, i7 %a, i7 %b
181 %icmp1 = icmp ugt i7 %i0, %c
182 %i1 = select i1 %icmp1, i7 %i0, i7 %c
183 store i7 %i1, i7 addrspace(1)* %out
187 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i33:
189 define amdgpu_kernel void @v_test_imax3_sgt_i33(i33 addrspace(1)* %out, i33 addrspace(1)* %aptr, i33 addrspace(1)* %bptr, i33 addrspace(1)* %cptr) #0 {
190 %tid = call i32 @llvm.amdgcn.workitem.id.x()
191 %gep0 = getelementptr i33, i33 addrspace(1)* %aptr, i32 %tid
192 %gep1 = getelementptr i33, i33 addrspace(1)* %bptr, i32 %tid
193 %gep2 = getelementptr i33, i33 addrspace(1)* %cptr, i32 %tid
194 %outgep = getelementptr i33, i33 addrspace(1)* %out, i32 %tid
195 %a = load i33, i33 addrspace(1)* %gep0
196 %b = load i33, i33 addrspace(1)* %gep1
197 %c = load i33, i33 addrspace(1)* %gep2
198 %icmp0 = icmp sgt i33 %a, %b
199 %i0 = select i1 %icmp0, i33 %a, i33 %b
200 %icmp1 = icmp sgt i33 %i0, %c
201 %i1 = select i1 %icmp1, i33 %i0, i33 %c
202 store i33 %i1, i33 addrspace(1)* %out
206 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i33:
208 define amdgpu_kernel void @v_test_umax3_ugt_i33(i33 addrspace(1)* %out, i33 addrspace(1)* %aptr, i33 addrspace(1)* %bptr, i33 addrspace(1)* %cptr) #0 {
209 %tid = call i32 @llvm.amdgcn.workitem.id.x()
210 %gep0 = getelementptr i33, i33 addrspace(1)* %aptr, i32 %tid
211 %gep1 = getelementptr i33, i33 addrspace(1)* %bptr, i32 %tid
212 %gep2 = getelementptr i33, i33 addrspace(1)* %cptr, i32 %tid
213 %outgep = getelementptr i33, i33 addrspace(1)* %out, i32 %tid
214 %a = load i33, i33 addrspace(1)* %gep0
215 %b = load i33, i33 addrspace(1)* %gep1
216 %c = load i33, i33 addrspace(1)* %gep2
217 %icmp0 = icmp ugt i33 %a, %b
218 %i0 = select i1 %icmp0, i33 %a, i33 %b
219 %icmp1 = icmp ugt i33 %i0, %c
220 %i1 = select i1 %icmp1, i33 %i0, i33 %c
221 store i33 %i1, i33 addrspace(1)* %out
225 ; GCN-LABEL: {{^}}v_test_imax3_sgt_i64:
227 define amdgpu_kernel void @v_test_imax3_sgt_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr, i64 addrspace(1)* %cptr) #0 {
228 %tid = call i32 @llvm.amdgcn.workitem.id.x()
229 %gep0 = getelementptr i64, i64 addrspace(1)* %aptr, i32 %tid
230 %gep1 = getelementptr i64, i64 addrspace(1)* %bptr, i32 %tid
231 %gep2 = getelementptr i64, i64 addrspace(1)* %cptr, i32 %tid
232 %outgep = getelementptr i64, i64 addrspace(1)* %out, i32 %tid
233 %a = load i64, i64 addrspace(1)* %gep0
234 %b = load i64, i64 addrspace(1)* %gep1
235 %c = load i64, i64 addrspace(1)* %gep2
236 %icmp0 = icmp sgt i64 %a, %b
237 %i0 = select i1 %icmp0, i64 %a, i64 %b
238 %icmp1 = icmp sgt i64 %i0, %c
239 %i1 = select i1 %icmp1, i64 %i0, i64 %c
240 store i64 %i1, i64 addrspace(1)* %out
244 ; GCN-LABEL: {{^}}v_test_umax3_ugt_i64:
246 define amdgpu_kernel void @v_test_umax3_ugt_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr, i64 addrspace(1)* %cptr) #0 {
247 %tid = call i32 @llvm.amdgcn.workitem.id.x()
248 %gep0 = getelementptr i64, i64 addrspace(1)* %aptr, i32 %tid
249 %gep1 = getelementptr i64, i64 addrspace(1)* %bptr, i32 %tid
250 %gep2 = getelementptr i64, i64 addrspace(1)* %cptr, i32 %tid
251 %outgep = getelementptr i64, i64 addrspace(1)* %out, i32 %tid
252 %a = load i64, i64 addrspace(1)* %gep0
253 %b = load i64, i64 addrspace(1)* %gep1
254 %c = load i64, i64 addrspace(1)* %gep2
255 %icmp0 = icmp ugt i64 %a, %b
256 %i0 = select i1 %icmp0, i64 %a, i64 %b
257 %icmp1 = icmp ugt i64 %i0, %c
258 %i1 = select i1 %icmp1, i64 %i0, i64 %c
259 store i64 %i1, i64 addrspace(1)* %out
263 declare i32 @llvm.amdgcn.workitem.id.x() #1
265 attributes #0 = { nounwind }
266 attributes #1 = { nounwind readnone speculatable }