CodeGen: extend f16 conversions to permit types > float.
[oota-llvm.git] / test / CodeGen / R600 / llvm.SI.gather4.ll
1 ;RUN: llc < %s -march=r600 -mcpu=verde -verify-machineinstrs | FileCheck %s
2
3 ;CHECK-LABEL: @gather4_v2
4 ;CHECK: IMAGE_GATHER4 {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
5 define void @gather4_v2() #0 {
6 main_body:
7   %r = call <4 x float> @llvm.SI.gather4.v2i32(<2 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
8   %r0 = extractelement <4 x float> %r, i32 0
9   %r1 = extractelement <4 x float> %r, i32 1
10   %r2 = extractelement <4 x float> %r, i32 2
11   %r3 = extractelement <4 x float> %r, i32 3
12   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
13   ret void
14 }
15
16 ;CHECK-LABEL: @gather4
17 ;CHECK: IMAGE_GATHER4 {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
18 define void @gather4() #0 {
19 main_body:
20   %r = call <4 x float> @llvm.SI.gather4.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
21   %r0 = extractelement <4 x float> %r, i32 0
22   %r1 = extractelement <4 x float> %r, i32 1
23   %r2 = extractelement <4 x float> %r, i32 2
24   %r3 = extractelement <4 x float> %r, i32 3
25   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
26   ret void
27 }
28
29 ;CHECK-LABEL: @gather4_cl
30 ;CHECK: IMAGE_GATHER4_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
31 define void @gather4_cl() #0 {
32 main_body:
33   %r = call <4 x float> @llvm.SI.gather4.cl.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
34   %r0 = extractelement <4 x float> %r, i32 0
35   %r1 = extractelement <4 x float> %r, i32 1
36   %r2 = extractelement <4 x float> %r, i32 2
37   %r3 = extractelement <4 x float> %r, i32 3
38   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
39   ret void
40 }
41
42 ;CHECK-LABEL: @gather4_l
43 ;CHECK: IMAGE_GATHER4_L {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
44 define void @gather4_l() #0 {
45 main_body:
46   %r = call <4 x float> @llvm.SI.gather4.l.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
47   %r0 = extractelement <4 x float> %r, i32 0
48   %r1 = extractelement <4 x float> %r, i32 1
49   %r2 = extractelement <4 x float> %r, i32 2
50   %r3 = extractelement <4 x float> %r, i32 3
51   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
52   ret void
53 }
54
55 ;CHECK-LABEL: @gather4_b
56 ;CHECK: IMAGE_GATHER4_B {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
57 define void @gather4_b() #0 {
58 main_body:
59   %r = call <4 x float> @llvm.SI.gather4.b.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
60   %r0 = extractelement <4 x float> %r, i32 0
61   %r1 = extractelement <4 x float> %r, i32 1
62   %r2 = extractelement <4 x float> %r, i32 2
63   %r3 = extractelement <4 x float> %r, i32 3
64   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
65   ret void
66 }
67
68 ;CHECK-LABEL: @gather4_b_cl
69 ;CHECK: IMAGE_GATHER4_B_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
70 define void @gather4_b_cl() #0 {
71 main_body:
72   %r = call <4 x float> @llvm.SI.gather4.b.cl.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
73   %r0 = extractelement <4 x float> %r, i32 0
74   %r1 = extractelement <4 x float> %r, i32 1
75   %r2 = extractelement <4 x float> %r, i32 2
76   %r3 = extractelement <4 x float> %r, i32 3
77   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
78   ret void
79 }
80
81 ;CHECK-LABEL: @gather4_b_cl_v8
82 ;CHECK: IMAGE_GATHER4_B_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
83 define void @gather4_b_cl_v8() #0 {
84 main_body:
85   %r = call <4 x float> @llvm.SI.gather4.b.cl.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
86   %r0 = extractelement <4 x float> %r, i32 0
87   %r1 = extractelement <4 x float> %r, i32 1
88   %r2 = extractelement <4 x float> %r, i32 2
89   %r3 = extractelement <4 x float> %r, i32 3
90   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
91   ret void
92 }
93
94 ;CHECK-LABEL: @gather4_lz_v2
95 ;CHECK: IMAGE_GATHER4_LZ {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
96 define void @gather4_lz_v2() #0 {
97 main_body:
98   %r = call <4 x float> @llvm.SI.gather4.lz.v2i32(<2 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
99   %r0 = extractelement <4 x float> %r, i32 0
100   %r1 = extractelement <4 x float> %r, i32 1
101   %r2 = extractelement <4 x float> %r, i32 2
102   %r3 = extractelement <4 x float> %r, i32 3
103   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
104   ret void
105 }
106
107 ;CHECK-LABEL: @gather4_lz
108 ;CHECK: IMAGE_GATHER4_LZ {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
109 define void @gather4_lz() #0 {
110 main_body:
111   %r = call <4 x float> @llvm.SI.gather4.lz.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
112   %r0 = extractelement <4 x float> %r, i32 0
113   %r1 = extractelement <4 x float> %r, i32 1
114   %r2 = extractelement <4 x float> %r, i32 2
115   %r3 = extractelement <4 x float> %r, i32 3
116   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
117   ret void
118 }
119
120
121
122 ;CHECK-LABEL: @gather4_o
123 ;CHECK: IMAGE_GATHER4_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
124 define void @gather4_o() #0 {
125 main_body:
126   %r = call <4 x float> @llvm.SI.gather4.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
127   %r0 = extractelement <4 x float> %r, i32 0
128   %r1 = extractelement <4 x float> %r, i32 1
129   %r2 = extractelement <4 x float> %r, i32 2
130   %r3 = extractelement <4 x float> %r, i32 3
131   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
132   ret void
133 }
134
135 ;CHECK-LABEL: @gather4_cl_o
136 ;CHECK: IMAGE_GATHER4_CL_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
137 define void @gather4_cl_o() #0 {
138 main_body:
139   %r = call <4 x float> @llvm.SI.gather4.cl.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
140   %r0 = extractelement <4 x float> %r, i32 0
141   %r1 = extractelement <4 x float> %r, i32 1
142   %r2 = extractelement <4 x float> %r, i32 2
143   %r3 = extractelement <4 x float> %r, i32 3
144   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
145   ret void
146 }
147
148 ;CHECK-LABEL: @gather4_cl_o_v8
149 ;CHECK: IMAGE_GATHER4_CL_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
150 define void @gather4_cl_o_v8() #0 {
151 main_body:
152   %r = call <4 x float> @llvm.SI.gather4.cl.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
153   %r0 = extractelement <4 x float> %r, i32 0
154   %r1 = extractelement <4 x float> %r, i32 1
155   %r2 = extractelement <4 x float> %r, i32 2
156   %r3 = extractelement <4 x float> %r, i32 3
157   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
158   ret void
159 }
160
161 ;CHECK-LABEL: @gather4_l_o
162 ;CHECK: IMAGE_GATHER4_L_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
163 define void @gather4_l_o() #0 {
164 main_body:
165   %r = call <4 x float> @llvm.SI.gather4.l.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
166   %r0 = extractelement <4 x float> %r, i32 0
167   %r1 = extractelement <4 x float> %r, i32 1
168   %r2 = extractelement <4 x float> %r, i32 2
169   %r3 = extractelement <4 x float> %r, i32 3
170   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
171   ret void
172 }
173
174 ;CHECK-LABEL: @gather4_l_o_v8
175 ;CHECK: IMAGE_GATHER4_L_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
176 define void @gather4_l_o_v8() #0 {
177 main_body:
178   %r = call <4 x float> @llvm.SI.gather4.l.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
179   %r0 = extractelement <4 x float> %r, i32 0
180   %r1 = extractelement <4 x float> %r, i32 1
181   %r2 = extractelement <4 x float> %r, i32 2
182   %r3 = extractelement <4 x float> %r, i32 3
183   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
184   ret void
185 }
186
187 ;CHECK-LABEL: @gather4_b_o
188 ;CHECK: IMAGE_GATHER4_B_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
189 define void @gather4_b_o() #0 {
190 main_body:
191   %r = call <4 x float> @llvm.SI.gather4.b.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
192   %r0 = extractelement <4 x float> %r, i32 0
193   %r1 = extractelement <4 x float> %r, i32 1
194   %r2 = extractelement <4 x float> %r, i32 2
195   %r3 = extractelement <4 x float> %r, i32 3
196   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
197   ret void
198 }
199
200 ;CHECK-LABEL: @gather4_b_o_v8
201 ;CHECK: IMAGE_GATHER4_B_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
202 define void @gather4_b_o_v8() #0 {
203 main_body:
204   %r = call <4 x float> @llvm.SI.gather4.b.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
205   %r0 = extractelement <4 x float> %r, i32 0
206   %r1 = extractelement <4 x float> %r, i32 1
207   %r2 = extractelement <4 x float> %r, i32 2
208   %r3 = extractelement <4 x float> %r, i32 3
209   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
210   ret void
211 }
212
213 ;CHECK-LABEL: @gather4_b_cl_o
214 ;CHECK: IMAGE_GATHER4_B_CL_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
215 define void @gather4_b_cl_o() #0 {
216 main_body:
217   %r = call <4 x float> @llvm.SI.gather4.b.cl.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
218   %r0 = extractelement <4 x float> %r, i32 0
219   %r1 = extractelement <4 x float> %r, i32 1
220   %r2 = extractelement <4 x float> %r, i32 2
221   %r3 = extractelement <4 x float> %r, i32 3
222   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
223   ret void
224 }
225
226 ;CHECK-LABEL: @gather4_lz_o
227 ;CHECK: IMAGE_GATHER4_LZ_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
228 define void @gather4_lz_o() #0 {
229 main_body:
230   %r = call <4 x float> @llvm.SI.gather4.lz.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
231   %r0 = extractelement <4 x float> %r, i32 0
232   %r1 = extractelement <4 x float> %r, i32 1
233   %r2 = extractelement <4 x float> %r, i32 2
234   %r3 = extractelement <4 x float> %r, i32 3
235   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
236   ret void
237 }
238
239
240
241 ;CHECK-LABEL: @gather4_c
242 ;CHECK: IMAGE_GATHER4_C {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
243 define void @gather4_c() #0 {
244 main_body:
245   %r = call <4 x float> @llvm.SI.gather4.c.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
246   %r0 = extractelement <4 x float> %r, i32 0
247   %r1 = extractelement <4 x float> %r, i32 1
248   %r2 = extractelement <4 x float> %r, i32 2
249   %r3 = extractelement <4 x float> %r, i32 3
250   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
251   ret void
252 }
253
254 ;CHECK-LABEL: @gather4_c_cl
255 ;CHECK: IMAGE_GATHER4_C_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
256 define void @gather4_c_cl() #0 {
257 main_body:
258   %r = call <4 x float> @llvm.SI.gather4.c.cl.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
259   %r0 = extractelement <4 x float> %r, i32 0
260   %r1 = extractelement <4 x float> %r, i32 1
261   %r2 = extractelement <4 x float> %r, i32 2
262   %r3 = extractelement <4 x float> %r, i32 3
263   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
264   ret void
265 }
266
267 ;CHECK-LABEL: @gather4_c_cl_v8
268 ;CHECK: IMAGE_GATHER4_C_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
269 define void @gather4_c_cl_v8() #0 {
270 main_body:
271   %r = call <4 x float> @llvm.SI.gather4.c.cl.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
272   %r0 = extractelement <4 x float> %r, i32 0
273   %r1 = extractelement <4 x float> %r, i32 1
274   %r2 = extractelement <4 x float> %r, i32 2
275   %r3 = extractelement <4 x float> %r, i32 3
276   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
277   ret void
278 }
279
280 ;CHECK-LABEL: @gather4_c_l
281 ;CHECK: IMAGE_GATHER4_C_L {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
282 define void @gather4_c_l() #0 {
283 main_body:
284   %r = call <4 x float> @llvm.SI.gather4.c.l.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
285   %r0 = extractelement <4 x float> %r, i32 0
286   %r1 = extractelement <4 x float> %r, i32 1
287   %r2 = extractelement <4 x float> %r, i32 2
288   %r3 = extractelement <4 x float> %r, i32 3
289   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
290   ret void
291 }
292
293 ;CHECK-LABEL: @gather4_c_l_v8
294 ;CHECK: IMAGE_GATHER4_C_L {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
295 define void @gather4_c_l_v8() #0 {
296 main_body:
297   %r = call <4 x float> @llvm.SI.gather4.c.l.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
298   %r0 = extractelement <4 x float> %r, i32 0
299   %r1 = extractelement <4 x float> %r, i32 1
300   %r2 = extractelement <4 x float> %r, i32 2
301   %r3 = extractelement <4 x float> %r, i32 3
302   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
303   ret void
304 }
305
306 ;CHECK-LABEL: @gather4_c_b
307 ;CHECK: IMAGE_GATHER4_C_B {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
308 define void @gather4_c_b() #0 {
309 main_body:
310   %r = call <4 x float> @llvm.SI.gather4.c.b.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
311   %r0 = extractelement <4 x float> %r, i32 0
312   %r1 = extractelement <4 x float> %r, i32 1
313   %r2 = extractelement <4 x float> %r, i32 2
314   %r3 = extractelement <4 x float> %r, i32 3
315   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
316   ret void
317 }
318
319 ;CHECK-LABEL: @gather4_c_b_v8
320 ;CHECK: IMAGE_GATHER4_C_B {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
321 define void @gather4_c_b_v8() #0 {
322 main_body:
323   %r = call <4 x float> @llvm.SI.gather4.c.b.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
324   %r0 = extractelement <4 x float> %r, i32 0
325   %r1 = extractelement <4 x float> %r, i32 1
326   %r2 = extractelement <4 x float> %r, i32 2
327   %r3 = extractelement <4 x float> %r, i32 3
328   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
329   ret void
330 }
331
332 ;CHECK-LABEL: @gather4_c_b_cl
333 ;CHECK: IMAGE_GATHER4_C_B_CL {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
334 define void @gather4_c_b_cl() #0 {
335 main_body:
336   %r = call <4 x float> @llvm.SI.gather4.c.b.cl.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
337   %r0 = extractelement <4 x float> %r, i32 0
338   %r1 = extractelement <4 x float> %r, i32 1
339   %r2 = extractelement <4 x float> %r, i32 2
340   %r3 = extractelement <4 x float> %r, i32 3
341   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
342   ret void
343 }
344
345 ;CHECK-LABEL: @gather4_c_lz
346 ;CHECK: IMAGE_GATHER4_C_LZ {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
347 define void @gather4_c_lz() #0 {
348 main_body:
349   %r = call <4 x float> @llvm.SI.gather4.c.lz.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
350   %r0 = extractelement <4 x float> %r, i32 0
351   %r1 = extractelement <4 x float> %r, i32 1
352   %r2 = extractelement <4 x float> %r, i32 2
353   %r3 = extractelement <4 x float> %r, i32 3
354   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
355   ret void
356 }
357
358
359
360 ;CHECK-LABEL: @gather4_c_o
361 ;CHECK: IMAGE_GATHER4_C_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
362 define void @gather4_c_o() #0 {
363 main_body:
364   %r = call <4 x float> @llvm.SI.gather4.c.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
365   %r0 = extractelement <4 x float> %r, i32 0
366   %r1 = extractelement <4 x float> %r, i32 1
367   %r2 = extractelement <4 x float> %r, i32 2
368   %r3 = extractelement <4 x float> %r, i32 3
369   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
370   ret void
371 }
372
373 ;CHECK-LABEL: @gather4_c_o_v8
374 ;CHECK: IMAGE_GATHER4_C_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
375 define void @gather4_c_o_v8() #0 {
376 main_body:
377   %r = call <4 x float> @llvm.SI.gather4.c.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
378   %r0 = extractelement <4 x float> %r, i32 0
379   %r1 = extractelement <4 x float> %r, i32 1
380   %r2 = extractelement <4 x float> %r, i32 2
381   %r3 = extractelement <4 x float> %r, i32 3
382   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
383   ret void
384 }
385
386 ;CHECK-LABEL: @gather4_c_cl_o
387 ;CHECK: IMAGE_GATHER4_C_CL_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
388 define void @gather4_c_cl_o() #0 {
389 main_body:
390   %r = call <4 x float> @llvm.SI.gather4.c.cl.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
391   %r0 = extractelement <4 x float> %r, i32 0
392   %r1 = extractelement <4 x float> %r, i32 1
393   %r2 = extractelement <4 x float> %r, i32 2
394   %r3 = extractelement <4 x float> %r, i32 3
395   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
396   ret void
397 }
398
399 ;CHECK-LABEL: @gather4_c_l_o
400 ;CHECK: IMAGE_GATHER4_C_L_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
401 define void @gather4_c_l_o() #0 {
402 main_body:
403   %r = call <4 x float> @llvm.SI.gather4.c.l.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
404   %r0 = extractelement <4 x float> %r, i32 0
405   %r1 = extractelement <4 x float> %r, i32 1
406   %r2 = extractelement <4 x float> %r, i32 2
407   %r3 = extractelement <4 x float> %r, i32 3
408   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
409   ret void
410 }
411
412 ;CHECK-LABEL: @gather4_c_b_o
413 ;CHECK: IMAGE_GATHER4_C_B_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
414 define void @gather4_c_b_o() #0 {
415 main_body:
416   %r = call <4 x float> @llvm.SI.gather4.c.b.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
417   %r0 = extractelement <4 x float> %r, i32 0
418   %r1 = extractelement <4 x float> %r, i32 1
419   %r2 = extractelement <4 x float> %r, i32 2
420   %r3 = extractelement <4 x float> %r, i32 3
421   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
422   ret void
423 }
424
425 ;CHECK-LABEL: @gather4_c_b_cl_o
426 ;CHECK: IMAGE_GATHER4_C_B_CL_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
427 define void @gather4_c_b_cl_o() #0 {
428 main_body:
429   %r = call <4 x float> @llvm.SI.gather4.c.b.cl.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
430   %r0 = extractelement <4 x float> %r, i32 0
431   %r1 = extractelement <4 x float> %r, i32 1
432   %r2 = extractelement <4 x float> %r, i32 2
433   %r3 = extractelement <4 x float> %r, i32 3
434   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
435   ret void
436 }
437
438 ;CHECK-LABEL: @gather4_c_lz_o
439 ;CHECK: IMAGE_GATHER4_C_LZ_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
440 define void @gather4_c_lz_o() #0 {
441 main_body:
442   %r = call <4 x float> @llvm.SI.gather4.c.lz.o.v4i32(<4 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
443   %r0 = extractelement <4 x float> %r, i32 0
444   %r1 = extractelement <4 x float> %r, i32 1
445   %r2 = extractelement <4 x float> %r, i32 2
446   %r3 = extractelement <4 x float> %r, i32 3
447   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
448   ret void
449 }
450
451 ;CHECK-LABEL: @gather4_c_lz_o_v8
452 ;CHECK: IMAGE_GATHER4_C_LZ_O {{v\[[0-9]+:[0-9]+\]}}, 1, 0, 0, -1, 0, 0, 0, 0, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
453 define void @gather4_c_lz_o_v8() #0 {
454 main_body:
455   %r = call <4 x float> @llvm.SI.gather4.c.lz.o.v8i32(<8 x i32> undef, <32 x i8> undef, <16 x i8> undef, i32 1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0)
456   %r0 = extractelement <4 x float> %r, i32 0
457   %r1 = extractelement <4 x float> %r, i32 1
458   %r2 = extractelement <4 x float> %r, i32 2
459   %r3 = extractelement <4 x float> %r, i32 3
460   call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 1, float %r0, float %r1, float %r2, float %r3)
461   ret void
462 }
463
464
465
466 declare <4 x float> @llvm.SI.gather4.v2i32(<2 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
467 declare <4 x float> @llvm.SI.gather4.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
468 declare <4 x float> @llvm.SI.gather4.cl.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
469 declare <4 x float> @llvm.SI.gather4.l.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
470 declare <4 x float> @llvm.SI.gather4.b.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
471 declare <4 x float> @llvm.SI.gather4.b.cl.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
472 declare <4 x float> @llvm.SI.gather4.b.cl.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
473 declare <4 x float> @llvm.SI.gather4.lz.v2i32(<2 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
474 declare <4 x float> @llvm.SI.gather4.lz.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
475
476 declare <4 x float> @llvm.SI.gather4.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
477 declare <4 x float> @llvm.SI.gather4.cl.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
478 declare <4 x float> @llvm.SI.gather4.cl.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
479 declare <4 x float> @llvm.SI.gather4.l.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
480 declare <4 x float> @llvm.SI.gather4.l.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
481 declare <4 x float> @llvm.SI.gather4.b.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
482 declare <4 x float> @llvm.SI.gather4.b.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
483 declare <4 x float> @llvm.SI.gather4.b.cl.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
484 declare <4 x float> @llvm.SI.gather4.lz.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
485
486 declare <4 x float> @llvm.SI.gather4.c.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
487 declare <4 x float> @llvm.SI.gather4.c.cl.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
488 declare <4 x float> @llvm.SI.gather4.c.cl.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
489 declare <4 x float> @llvm.SI.gather4.c.l.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
490 declare <4 x float> @llvm.SI.gather4.c.l.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
491 declare <4 x float> @llvm.SI.gather4.c.b.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
492 declare <4 x float> @llvm.SI.gather4.c.b.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
493 declare <4 x float> @llvm.SI.gather4.c.b.cl.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
494 declare <4 x float> @llvm.SI.gather4.c.lz.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
495
496 declare <4 x float> @llvm.SI.gather4.c.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
497 declare <4 x float> @llvm.SI.gather4.c.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
498 declare <4 x float> @llvm.SI.gather4.c.cl.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
499 declare <4 x float> @llvm.SI.gather4.c.l.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
500 declare <4 x float> @llvm.SI.gather4.c.b.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
501 declare <4 x float> @llvm.SI.gather4.c.b.cl.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
502 declare <4 x float> @llvm.SI.gather4.c.lz.o.v4i32(<4 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
503 declare <4 x float> @llvm.SI.gather4.c.lz.o.v8i32(<8 x i32>, <32 x i8>, <16 x i8>, i32, i32, i32, i32, i32, i32, i32, i32) #1
504
505 declare void @llvm.SI.export(i32, i32, i32, i32, i32, float, float, float, float)
506
507 attributes #0 = { "ShaderType"="0" }
508 attributes #1 = { nounwind readnone }