Satiate the sanitizer build bot
[oota-llvm.git] / include / llvm / IR / IntrinsicsNVVM.td
1 //===- IntrinsicsNVVM.td - Defines NVVM intrinsics ---------*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines all of the NVVM-specific intrinsics for use with NVPTX.
11 //
12 //===----------------------------------------------------------------------===//
13
14 def llvm_anyi64ptr_ty     : LLVMAnyPointerType<llvm_i64_ty>;     // (space)i64*
15
16 //
17 // MISC
18 //
19
20   def int_nvvm_clz_i : GCCBuiltin<"__nvvm_clz_i">,
21       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
22   def int_nvvm_clz_ll : GCCBuiltin<"__nvvm_clz_ll">,
23       Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>;
24
25   def int_nvvm_popc_i : GCCBuiltin<"__nvvm_popc_i">,
26       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
27   def int_nvvm_popc_ll : GCCBuiltin<"__nvvm_popc_ll">,
28       Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>;
29
30   def int_nvvm_prmt : GCCBuiltin<"__nvvm_prmt">,
31       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
32         [IntrNoMem, Commutative]>;
33
34 //
35 // Min Max
36 //
37
38   def int_nvvm_min_i : GCCBuiltin<"__nvvm_min_i">,
39       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
40         [IntrNoMem, Commutative]>;
41   def int_nvvm_min_ui : GCCBuiltin<"__nvvm_min_ui">,
42       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
43         [IntrNoMem, Commutative]>;
44
45   def int_nvvm_min_ll : GCCBuiltin<"__nvvm_min_ll">,
46       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
47         [IntrNoMem, Commutative]>;
48   def int_nvvm_min_ull : GCCBuiltin<"__nvvm_min_ull">,
49       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
50         [IntrNoMem, Commutative]>;
51
52   def int_nvvm_max_i : GCCBuiltin<"__nvvm_max_i">,
53       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
54         [IntrNoMem, Commutative]>;
55   def int_nvvm_max_ui : GCCBuiltin<"__nvvm_max_ui">,
56       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
57         [IntrNoMem, Commutative]>;
58
59   def int_nvvm_max_ll : GCCBuiltin<"__nvvm_max_ll">,
60       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
61         [IntrNoMem, Commutative]>;
62   def int_nvvm_max_ull : GCCBuiltin<"__nvvm_max_ull">,
63       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
64         [IntrNoMem, Commutative]>;
65
66   def int_nvvm_fmin_f : GCCBuiltin<"__nvvm_fmin_f">,
67       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
68         [IntrNoMem, Commutative]>;
69   def int_nvvm_fmin_ftz_f : GCCBuiltin<"__nvvm_fmin_ftz_f">,
70       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
71         [IntrNoMem, Commutative]>;
72
73   def int_nvvm_fmax_f : GCCBuiltin<"__nvvm_fmax_f">,
74       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty]
75         , [IntrNoMem, Commutative]>;
76   def int_nvvm_fmax_ftz_f : GCCBuiltin<"__nvvm_fmax_ftz_f">,
77       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
78         [IntrNoMem, Commutative]>;
79
80   def int_nvvm_fmin_d : GCCBuiltin<"__nvvm_fmin_d">,
81       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
82         [IntrNoMem, Commutative]>;
83   def int_nvvm_fmax_d : GCCBuiltin<"__nvvm_fmax_d">,
84       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
85         [IntrNoMem, Commutative]>;
86
87 //
88 // Multiplication
89 //
90
91   def int_nvvm_mulhi_i : GCCBuiltin<"__nvvm_mulhi_i">,
92       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
93         [IntrNoMem, Commutative]>;
94   def int_nvvm_mulhi_ui : GCCBuiltin<"__nvvm_mulhi_ui">,
95       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
96         [IntrNoMem, Commutative]>;
97
98   def int_nvvm_mulhi_ll : GCCBuiltin<"__nvvm_mulhi_ll">,
99       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
100         [IntrNoMem, Commutative]>;
101   def int_nvvm_mulhi_ull : GCCBuiltin<"__nvvm_mulhi_ull">,
102       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
103         [IntrNoMem, Commutative]>;
104
105   def int_nvvm_mul_rn_ftz_f : GCCBuiltin<"__nvvm_mul_rn_ftz_f">,
106       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
107         [IntrNoMem, Commutative]>;
108   def int_nvvm_mul_rn_f : GCCBuiltin<"__nvvm_mul_rn_f">,
109       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
110         [IntrNoMem, Commutative]>;
111   def int_nvvm_mul_rz_ftz_f : GCCBuiltin<"__nvvm_mul_rz_ftz_f">,
112       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
113         [IntrNoMem, Commutative]>;
114   def int_nvvm_mul_rz_f : GCCBuiltin<"__nvvm_mul_rz_f">,
115       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
116         [IntrNoMem, Commutative]>;
117   def int_nvvm_mul_rm_ftz_f : GCCBuiltin<"__nvvm_mul_rm_ftz_f">,
118       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
119         [IntrNoMem, Commutative]>;
120   def int_nvvm_mul_rm_f : GCCBuiltin<"__nvvm_mul_rm_f">,
121       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
122         [IntrNoMem, Commutative]>;
123   def int_nvvm_mul_rp_ftz_f : GCCBuiltin<"__nvvm_mul_rp_ftz_f">,
124       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
125         [IntrNoMem, Commutative]>;
126   def int_nvvm_mul_rp_f : GCCBuiltin<"__nvvm_mul_rp_f">,
127       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
128         [IntrNoMem, Commutative]>;
129
130   def int_nvvm_mul_rn_d : GCCBuiltin<"__nvvm_mul_rn_d">,
131       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
132         [IntrNoMem, Commutative]>;
133   def int_nvvm_mul_rz_d : GCCBuiltin<"__nvvm_mul_rz_d">,
134       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
135         [IntrNoMem, Commutative]>;
136   def int_nvvm_mul_rm_d : GCCBuiltin<"__nvvm_mul_rm_d">,
137       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
138         [IntrNoMem, Commutative]>;
139   def int_nvvm_mul_rp_d : GCCBuiltin<"__nvvm_mul_rp_d">,
140       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
141         [IntrNoMem, Commutative]>;
142
143   def int_nvvm_mul24_i : GCCBuiltin<"__nvvm_mul24_i">,
144       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
145         [IntrNoMem, Commutative]>;
146   def int_nvvm_mul24_ui : GCCBuiltin<"__nvvm_mul24_ui">,
147       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
148         [IntrNoMem, Commutative]>;
149
150 //
151 // Div
152 //
153
154   def int_nvvm_div_approx_ftz_f : GCCBuiltin<"__nvvm_div_approx_ftz_f">,
155       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
156         [IntrNoMem, Commutative]>;
157   def int_nvvm_div_approx_f : GCCBuiltin<"__nvvm_div_approx_f">,
158       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
159         [IntrNoMem, Commutative]>;
160
161   def int_nvvm_div_rn_ftz_f : GCCBuiltin<"__nvvm_div_rn_ftz_f">,
162       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
163         [IntrNoMem, Commutative]>;
164   def int_nvvm_div_rn_f : GCCBuiltin<"__nvvm_div_rn_f">,
165       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
166         [IntrNoMem, Commutative]>;
167
168   def int_nvvm_div_rz_ftz_f : GCCBuiltin<"__nvvm_div_rz_ftz_f">,
169       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
170         [IntrNoMem, Commutative]>;
171   def int_nvvm_div_rz_f : GCCBuiltin<"__nvvm_div_rz_f">,
172       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
173         [IntrNoMem, Commutative]>;
174
175   def int_nvvm_div_rm_ftz_f : GCCBuiltin<"__nvvm_div_rm_ftz_f">,
176       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
177         [IntrNoMem, Commutative]>;
178   def int_nvvm_div_rm_f : GCCBuiltin<"__nvvm_div_rm_f">,
179       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
180         [IntrNoMem, Commutative]>;
181
182   def int_nvvm_div_rp_ftz_f : GCCBuiltin<"__nvvm_div_rp_ftz_f">,
183       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
184         [IntrNoMem, Commutative]>;
185   def int_nvvm_div_rp_f : GCCBuiltin<"__nvvm_div_rp_f">,
186       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
187         [IntrNoMem, Commutative]>;
188
189   def int_nvvm_div_rn_d : GCCBuiltin<"__nvvm_div_rn_d">,
190       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
191         [IntrNoMem, Commutative]>;
192   def int_nvvm_div_rz_d : GCCBuiltin<"__nvvm_div_rz_d">,
193       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
194         [IntrNoMem, Commutative]>;
195   def int_nvvm_div_rm_d : GCCBuiltin<"__nvvm_div_rm_d">,
196       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
197         [IntrNoMem, Commutative]>;
198   def int_nvvm_div_rp_d : GCCBuiltin<"__nvvm_div_rp_d">,
199       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
200         [IntrNoMem, Commutative]>;
201
202 //
203 // Brev
204 //
205
206   def int_nvvm_brev32 : GCCBuiltin<"__nvvm_brev32">,
207       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
208   def int_nvvm_brev64 : GCCBuiltin<"__nvvm_brev64">,
209       Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>;
210
211 //
212 // Sad
213 //
214
215   def int_nvvm_sad_i : GCCBuiltin<"__nvvm_sad_i">,
216       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
217         [IntrNoMem, Commutative]>;
218   def int_nvvm_sad_ui : GCCBuiltin<"__nvvm_sad_ui">,
219       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
220         [IntrNoMem, Commutative]>;
221
222 //
223 // Floor  Ceil
224 //
225
226   def int_nvvm_floor_ftz_f : GCCBuiltin<"__nvvm_floor_ftz_f">,
227       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
228   def int_nvvm_floor_f : GCCBuiltin<"__nvvm_floor_f">,
229       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
230   def int_nvvm_floor_d : GCCBuiltin<"__nvvm_floor_d">,
231       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
232
233   def int_nvvm_ceil_ftz_f : GCCBuiltin<"__nvvm_ceil_ftz_f">,
234       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
235   def int_nvvm_ceil_f : GCCBuiltin<"__nvvm_ceil_f">,
236       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
237   def int_nvvm_ceil_d : GCCBuiltin<"__nvvm_ceil_d">,
238       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
239
240 //
241 // Abs
242 //
243
244   def int_nvvm_abs_i : GCCBuiltin<"__nvvm_abs_i">,
245       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
246   def int_nvvm_abs_ll : GCCBuiltin<"__nvvm_abs_ll">,
247       Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>;
248
249   def int_nvvm_fabs_ftz_f : GCCBuiltin<"__nvvm_fabs_ftz_f">,
250       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
251   def int_nvvm_fabs_f : GCCBuiltin<"__nvvm_fabs_f">,
252       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
253
254   def int_nvvm_fabs_d : GCCBuiltin<"__nvvm_fabs_d">,
255       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
256
257 //
258 // Round
259 //
260
261   def int_nvvm_round_ftz_f : GCCBuiltin<"__nvvm_round_ftz_f">,
262       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
263   def int_nvvm_round_f : GCCBuiltin<"__nvvm_round_f">,
264       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
265
266   def int_nvvm_round_d : GCCBuiltin<"__nvvm_round_d">,
267       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
268
269 //
270 // Trunc
271 //
272
273   def int_nvvm_trunc_ftz_f : GCCBuiltin<"__nvvm_trunc_ftz_f">,
274       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
275   def int_nvvm_trunc_f : GCCBuiltin<"__nvvm_trunc_f">,
276       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
277
278   def int_nvvm_trunc_d : GCCBuiltin<"__nvvm_trunc_d">,
279       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
280
281 //
282 // Saturate
283 //
284
285   def int_nvvm_saturate_ftz_f : GCCBuiltin<"__nvvm_saturate_ftz_f">,
286       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
287   def int_nvvm_saturate_f : GCCBuiltin<"__nvvm_saturate_f">,
288       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
289
290   def int_nvvm_saturate_d : GCCBuiltin<"__nvvm_saturate_d">,
291       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
292
293 //
294 // Exp2  Log2
295 //
296
297   def int_nvvm_ex2_approx_ftz_f : GCCBuiltin<"__nvvm_ex2_approx_ftz_f">,
298       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
299   def int_nvvm_ex2_approx_f : GCCBuiltin<"__nvvm_ex2_approx_f">,
300       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
301   def int_nvvm_ex2_approx_d : GCCBuiltin<"__nvvm_ex2_approx_d">,
302       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
303
304   def int_nvvm_lg2_approx_ftz_f : GCCBuiltin<"__nvvm_lg2_approx_ftz_f">,
305       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
306   def int_nvvm_lg2_approx_f : GCCBuiltin<"__nvvm_lg2_approx_f">,
307       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
308   def int_nvvm_lg2_approx_d : GCCBuiltin<"__nvvm_lg2_approx_d">,
309       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
310
311 //
312 // Sin  Cos
313 //
314
315   def int_nvvm_sin_approx_ftz_f : GCCBuiltin<"__nvvm_sin_approx_ftz_f">,
316       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
317   def int_nvvm_sin_approx_f : GCCBuiltin<"__nvvm_sin_approx_f">,
318       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
319
320   def int_nvvm_cos_approx_ftz_f : GCCBuiltin<"__nvvm_cos_approx_ftz_f">,
321       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
322   def int_nvvm_cos_approx_f : GCCBuiltin<"__nvvm_cos_approx_f">,
323       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
324
325 //
326 // Fma
327 //
328
329   def int_nvvm_fma_rn_ftz_f : GCCBuiltin<"__nvvm_fma_rn_ftz_f">,
330       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
331         [IntrNoMem, Commutative]>;
332   def int_nvvm_fma_rn_f : GCCBuiltin<"__nvvm_fma_rn_f">,
333       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
334         [IntrNoMem, Commutative]>;
335   def int_nvvm_fma_rz_ftz_f : GCCBuiltin<"__nvvm_fma_rz_ftz_f">,
336       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
337         [IntrNoMem, Commutative]>;
338   def int_nvvm_fma_rz_f : GCCBuiltin<"__nvvm_fma_rz_f">,
339       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
340         [IntrNoMem, Commutative]>;
341   def int_nvvm_fma_rm_ftz_f : GCCBuiltin<"__nvvm_fma_rm_ftz_f">,
342       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
343         [IntrNoMem, Commutative]>;
344   def int_nvvm_fma_rm_f : GCCBuiltin<"__nvvm_fma_rm_f">,
345       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
346         [IntrNoMem, Commutative]>;
347   def int_nvvm_fma_rp_ftz_f : GCCBuiltin<"__nvvm_fma_rp_ftz_f">,
348       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
349         [IntrNoMem, Commutative]>;
350   def int_nvvm_fma_rp_f : GCCBuiltin<"__nvvm_fma_rp_f">,
351       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
352         [IntrNoMem, Commutative]>;
353
354   def int_nvvm_fma_rn_d : GCCBuiltin<"__nvvm_fma_rn_d">,
355       Intrinsic<[llvm_double_ty],
356         [llvm_double_ty, llvm_double_ty, llvm_double_ty],
357         [IntrNoMem, Commutative]>;
358   def int_nvvm_fma_rz_d : GCCBuiltin<"__nvvm_fma_rz_d">,
359       Intrinsic<[llvm_double_ty],
360         [llvm_double_ty, llvm_double_ty, llvm_double_ty],
361         [IntrNoMem, Commutative]>;
362   def int_nvvm_fma_rm_d : GCCBuiltin<"__nvvm_fma_rm_d">,
363       Intrinsic<[llvm_double_ty],
364         [llvm_double_ty, llvm_double_ty, llvm_double_ty],
365         [IntrNoMem, Commutative]>;
366   def int_nvvm_fma_rp_d : GCCBuiltin<"__nvvm_fma_rp_d">,
367       Intrinsic<[llvm_double_ty],
368         [llvm_double_ty, llvm_double_ty, llvm_double_ty],
369         [IntrNoMem, Commutative]>;
370
371 //
372 // Rcp
373 //
374
375   def int_nvvm_rcp_rn_ftz_f : GCCBuiltin<"__nvvm_rcp_rn_ftz_f">,
376       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
377   def int_nvvm_rcp_rn_f : GCCBuiltin<"__nvvm_rcp_rn_f">,
378       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
379   def int_nvvm_rcp_rz_ftz_f : GCCBuiltin<"__nvvm_rcp_rz_ftz_f">,
380       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
381   def int_nvvm_rcp_rz_f : GCCBuiltin<"__nvvm_rcp_rz_f">,
382       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
383   def int_nvvm_rcp_rm_ftz_f : GCCBuiltin<"__nvvm_rcp_rm_ftz_f">,
384       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
385   def int_nvvm_rcp_rm_f : GCCBuiltin<"__nvvm_rcp_rm_f">,
386       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
387   def int_nvvm_rcp_rp_ftz_f : GCCBuiltin<"__nvvm_rcp_rp_ftz_f">,
388       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
389   def int_nvvm_rcp_rp_f : GCCBuiltin<"__nvvm_rcp_rp_f">,
390       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
391
392   def int_nvvm_rcp_rn_d : GCCBuiltin<"__nvvm_rcp_rn_d">,
393       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
394   def int_nvvm_rcp_rz_d : GCCBuiltin<"__nvvm_rcp_rz_d">,
395       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
396   def int_nvvm_rcp_rm_d : GCCBuiltin<"__nvvm_rcp_rm_d">,
397       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
398   def int_nvvm_rcp_rp_d : GCCBuiltin<"__nvvm_rcp_rp_d">,
399       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
400
401   def int_nvvm_rcp_approx_ftz_d : GCCBuiltin<"__nvvm_rcp_approx_ftz_d">,
402       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
403
404 //
405 // Sqrt
406 //
407
408   def int_nvvm_sqrt_f : GCCBuiltin<"__nvvm_sqrt_f">,
409       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
410   def int_nvvm_sqrt_rn_ftz_f : GCCBuiltin<"__nvvm_sqrt_rn_ftz_f">,
411       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
412   def int_nvvm_sqrt_rn_f : GCCBuiltin<"__nvvm_sqrt_rn_f">,
413       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
414   def int_nvvm_sqrt_rz_ftz_f : GCCBuiltin<"__nvvm_sqrt_rz_ftz_f">,
415       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
416   def int_nvvm_sqrt_rz_f : GCCBuiltin<"__nvvm_sqrt_rz_f">,
417       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
418   def int_nvvm_sqrt_rm_ftz_f : GCCBuiltin<"__nvvm_sqrt_rm_ftz_f">,
419       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
420   def int_nvvm_sqrt_rm_f : GCCBuiltin<"__nvvm_sqrt_rm_f">,
421       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
422   def int_nvvm_sqrt_rp_ftz_f : GCCBuiltin<"__nvvm_sqrt_rp_ftz_f">,
423       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
424   def int_nvvm_sqrt_rp_f : GCCBuiltin<"__nvvm_sqrt_rp_f">,
425       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
426   def int_nvvm_sqrt_approx_ftz_f : GCCBuiltin<"__nvvm_sqrt_approx_ftz_f">,
427       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
428   def int_nvvm_sqrt_approx_f : GCCBuiltin<"__nvvm_sqrt_approx_f">,
429       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
430
431   def int_nvvm_sqrt_rn_d : GCCBuiltin<"__nvvm_sqrt_rn_d">,
432       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
433   def int_nvvm_sqrt_rz_d : GCCBuiltin<"__nvvm_sqrt_rz_d">,
434       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
435   def int_nvvm_sqrt_rm_d : GCCBuiltin<"__nvvm_sqrt_rm_d">,
436       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
437   def int_nvvm_sqrt_rp_d : GCCBuiltin<"__nvvm_sqrt_rp_d">,
438       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
439
440 //
441 // Rsqrt
442 //
443
444   def int_nvvm_rsqrt_approx_ftz_f : GCCBuiltin<"__nvvm_rsqrt_approx_ftz_f">,
445       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
446   def int_nvvm_rsqrt_approx_f : GCCBuiltin<"__nvvm_rsqrt_approx_f">,
447       Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
448   def int_nvvm_rsqrt_approx_d : GCCBuiltin<"__nvvm_rsqrt_approx_d">,
449       Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
450
451 //
452 // Add
453 //
454
455   def int_nvvm_add_rn_ftz_f : GCCBuiltin<"__nvvm_add_rn_ftz_f">,
456       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
457         [IntrNoMem, Commutative]>;
458   def int_nvvm_add_rn_f : GCCBuiltin<"__nvvm_add_rn_f">,
459       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
460         [IntrNoMem, Commutative]>;
461   def int_nvvm_add_rz_ftz_f : GCCBuiltin<"__nvvm_add_rz_ftz_f">,
462       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
463         [IntrNoMem, Commutative]>;
464   def int_nvvm_add_rz_f : GCCBuiltin<"__nvvm_add_rz_f">,
465       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
466         [IntrNoMem, Commutative]>;
467   def int_nvvm_add_rm_ftz_f : GCCBuiltin<"__nvvm_add_rm_ftz_f">,
468       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
469         [IntrNoMem, Commutative]>;
470   def int_nvvm_add_rm_f : GCCBuiltin<"__nvvm_add_rm_f">,
471       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
472         [IntrNoMem, Commutative]>;
473   def int_nvvm_add_rp_ftz_f : GCCBuiltin<"__nvvm_add_rp_ftz_f">,
474       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
475         [IntrNoMem, Commutative]>;
476   def int_nvvm_add_rp_f : GCCBuiltin<"__nvvm_add_rp_f">,
477       Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
478         [IntrNoMem, Commutative]>;
479
480   def int_nvvm_add_rn_d : GCCBuiltin<"__nvvm_add_rn_d">,
481       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
482         [IntrNoMem, Commutative]>;
483   def int_nvvm_add_rz_d : GCCBuiltin<"__nvvm_add_rz_d">,
484       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
485         [IntrNoMem, Commutative]>;
486   def int_nvvm_add_rm_d : GCCBuiltin<"__nvvm_add_rm_d">,
487       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
488         [IntrNoMem, Commutative]>;
489   def int_nvvm_add_rp_d : GCCBuiltin<"__nvvm_add_rp_d">,
490       Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
491         [IntrNoMem, Commutative]>;
492
493 //
494 // Convert
495 //
496
497   def int_nvvm_d2f_rn_ftz : GCCBuiltin<"__nvvm_d2f_rn_ftz">,
498       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
499   def int_nvvm_d2f_rn : GCCBuiltin<"__nvvm_d2f_rn">,
500       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
501   def int_nvvm_d2f_rz_ftz : GCCBuiltin<"__nvvm_d2f_rz_ftz">,
502       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
503   def int_nvvm_d2f_rz : GCCBuiltin<"__nvvm_d2f_rz">,
504       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
505   def int_nvvm_d2f_rm_ftz : GCCBuiltin<"__nvvm_d2f_rm_ftz">,
506       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
507   def int_nvvm_d2f_rm : GCCBuiltin<"__nvvm_d2f_rm">,
508       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
509   def int_nvvm_d2f_rp_ftz : GCCBuiltin<"__nvvm_d2f_rp_ftz">,
510       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
511   def int_nvvm_d2f_rp : GCCBuiltin<"__nvvm_d2f_rp">,
512       Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
513
514   def int_nvvm_d2i_rn : GCCBuiltin<"__nvvm_d2i_rn">,
515       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
516   def int_nvvm_d2i_rz : GCCBuiltin<"__nvvm_d2i_rz">,
517       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
518   def int_nvvm_d2i_rm : GCCBuiltin<"__nvvm_d2i_rm">,
519       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
520   def int_nvvm_d2i_rp : GCCBuiltin<"__nvvm_d2i_rp">,
521       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
522
523   def int_nvvm_d2ui_rn : GCCBuiltin<"__nvvm_d2ui_rn">,
524       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
525   def int_nvvm_d2ui_rz : GCCBuiltin<"__nvvm_d2ui_rz">,
526       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
527   def int_nvvm_d2ui_rm : GCCBuiltin<"__nvvm_d2ui_rm">,
528       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
529   def int_nvvm_d2ui_rp : GCCBuiltin<"__nvvm_d2ui_rp">,
530       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
531
532   def int_nvvm_i2d_rn : GCCBuiltin<"__nvvm_i2d_rn">,
533       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
534   def int_nvvm_i2d_rz : GCCBuiltin<"__nvvm_i2d_rz">,
535       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
536   def int_nvvm_i2d_rm : GCCBuiltin<"__nvvm_i2d_rm">,
537       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
538   def int_nvvm_i2d_rp : GCCBuiltin<"__nvvm_i2d_rp">,
539       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
540
541   def int_nvvm_ui2d_rn : GCCBuiltin<"__nvvm_ui2d_rn">,
542       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
543   def int_nvvm_ui2d_rz : GCCBuiltin<"__nvvm_ui2d_rz">,
544       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
545   def int_nvvm_ui2d_rm : GCCBuiltin<"__nvvm_ui2d_rm">,
546       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
547   def int_nvvm_ui2d_rp : GCCBuiltin<"__nvvm_ui2d_rp">,
548       Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
549
550   def int_nvvm_f2i_rn_ftz : GCCBuiltin<"__nvvm_f2i_rn_ftz">,
551       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
552   def int_nvvm_f2i_rn : GCCBuiltin<"__nvvm_f2i_rn">,
553       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
554   def int_nvvm_f2i_rz_ftz : GCCBuiltin<"__nvvm_f2i_rz_ftz">,
555       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
556   def int_nvvm_f2i_rz : GCCBuiltin<"__nvvm_f2i_rz">,
557       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
558   def int_nvvm_f2i_rm_ftz : GCCBuiltin<"__nvvm_f2i_rm_ftz">,
559       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
560   def int_nvvm_f2i_rm : GCCBuiltin<"__nvvm_f2i_rm">,
561       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
562   def int_nvvm_f2i_rp_ftz : GCCBuiltin<"__nvvm_f2i_rp_ftz">,
563       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
564   def int_nvvm_f2i_rp : GCCBuiltin<"__nvvm_f2i_rp">,
565       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
566
567   def int_nvvm_f2ui_rn_ftz : GCCBuiltin<"__nvvm_f2ui_rn_ftz">,
568       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
569   def int_nvvm_f2ui_rn : GCCBuiltin<"__nvvm_f2ui_rn">,
570       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
571   def int_nvvm_f2ui_rz_ftz : GCCBuiltin<"__nvvm_f2ui_rz_ftz">,
572       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
573   def int_nvvm_f2ui_rz : GCCBuiltin<"__nvvm_f2ui_rz">,
574       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
575   def int_nvvm_f2ui_rm_ftz : GCCBuiltin<"__nvvm_f2ui_rm_ftz">,
576       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
577   def int_nvvm_f2ui_rm : GCCBuiltin<"__nvvm_f2ui_rm">,
578       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
579   def int_nvvm_f2ui_rp_ftz : GCCBuiltin<"__nvvm_f2ui_rp_ftz">,
580       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
581   def int_nvvm_f2ui_rp : GCCBuiltin<"__nvvm_f2ui_rp">,
582       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
583
584   def int_nvvm_i2f_rn : GCCBuiltin<"__nvvm_i2f_rn">,
585       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
586   def int_nvvm_i2f_rz : GCCBuiltin<"__nvvm_i2f_rz">,
587       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
588   def int_nvvm_i2f_rm : GCCBuiltin<"__nvvm_i2f_rm">,
589       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
590   def int_nvvm_i2f_rp : GCCBuiltin<"__nvvm_i2f_rp">,
591       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
592
593   def int_nvvm_ui2f_rn : GCCBuiltin<"__nvvm_ui2f_rn">,
594       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
595   def int_nvvm_ui2f_rz : GCCBuiltin<"__nvvm_ui2f_rz">,
596       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
597   def int_nvvm_ui2f_rm : GCCBuiltin<"__nvvm_ui2f_rm">,
598       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
599   def int_nvvm_ui2f_rp : GCCBuiltin<"__nvvm_ui2f_rp">,
600       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
601
602   def int_nvvm_lohi_i2d : GCCBuiltin<"__nvvm_lohi_i2d">,
603       Intrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
604         [IntrNoMem, Commutative]>;
605
606   def int_nvvm_d2i_lo : GCCBuiltin<"__nvvm_d2i_lo">,
607       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
608   def int_nvvm_d2i_hi : GCCBuiltin<"__nvvm_d2i_hi">,
609       Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
610
611   def int_nvvm_f2ll_rn_ftz : GCCBuiltin<"__nvvm_f2ll_rn_ftz">,
612       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
613   def int_nvvm_f2ll_rn : GCCBuiltin<"__nvvm_f2ll_rn">,
614       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
615   def int_nvvm_f2ll_rz_ftz : GCCBuiltin<"__nvvm_f2ll_rz_ftz">,
616       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
617   def int_nvvm_f2ll_rz : GCCBuiltin<"__nvvm_f2ll_rz">,
618       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
619   def int_nvvm_f2ll_rm_ftz : GCCBuiltin<"__nvvm_f2ll_rm_ftz">,
620       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
621   def int_nvvm_f2ll_rm : GCCBuiltin<"__nvvm_f2ll_rm">,
622       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
623   def int_nvvm_f2ll_rp_ftz : GCCBuiltin<"__nvvm_f2ll_rp_ftz">,
624       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
625   def int_nvvm_f2ll_rp : GCCBuiltin<"__nvvm_f2ll_rp">,
626       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
627
628   def int_nvvm_f2ull_rn_ftz : GCCBuiltin<"__nvvm_f2ull_rn_ftz">,
629       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
630   def int_nvvm_f2ull_rn : GCCBuiltin<"__nvvm_f2ull_rn">,
631       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
632   def int_nvvm_f2ull_rz_ftz : GCCBuiltin<"__nvvm_f2ull_rz_ftz">,
633       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
634   def int_nvvm_f2ull_rz : GCCBuiltin<"__nvvm_f2ull_rz">,
635       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
636   def int_nvvm_f2ull_rm_ftz : GCCBuiltin<"__nvvm_f2ull_rm_ftz">,
637       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
638   def int_nvvm_f2ull_rm : GCCBuiltin<"__nvvm_f2ull_rm">,
639       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
640   def int_nvvm_f2ull_rp_ftz : GCCBuiltin<"__nvvm_f2ull_rp_ftz">,
641       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
642   def int_nvvm_f2ull_rp : GCCBuiltin<"__nvvm_f2ull_rp">,
643       Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
644
645   def int_nvvm_d2ll_rn : GCCBuiltin<"__nvvm_d2ll_rn">,
646       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
647   def int_nvvm_d2ll_rz : GCCBuiltin<"__nvvm_d2ll_rz">,
648       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
649   def int_nvvm_d2ll_rm : GCCBuiltin<"__nvvm_d2ll_rm">,
650       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
651   def int_nvvm_d2ll_rp : GCCBuiltin<"__nvvm_d2ll_rp">,
652       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
653
654   def int_nvvm_d2ull_rn : GCCBuiltin<"__nvvm_d2ull_rn">,
655       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
656   def int_nvvm_d2ull_rz : GCCBuiltin<"__nvvm_d2ull_rz">,
657       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
658   def int_nvvm_d2ull_rm : GCCBuiltin<"__nvvm_d2ull_rm">,
659       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
660   def int_nvvm_d2ull_rp : GCCBuiltin<"__nvvm_d2ull_rp">,
661       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
662
663   def int_nvvm_ll2f_rn : GCCBuiltin<"__nvvm_ll2f_rn">,
664       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
665   def int_nvvm_ll2f_rz : GCCBuiltin<"__nvvm_ll2f_rz">,
666       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
667   def int_nvvm_ll2f_rm : GCCBuiltin<"__nvvm_ll2f_rm">,
668       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
669   def int_nvvm_ll2f_rp : GCCBuiltin<"__nvvm_ll2f_rp">,
670       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
671   def int_nvvm_ull2f_rn : GCCBuiltin<"__nvvm_ull2f_rn">,
672       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
673   def int_nvvm_ull2f_rz : GCCBuiltin<"__nvvm_ull2f_rz">,
674       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
675   def int_nvvm_ull2f_rm : GCCBuiltin<"__nvvm_ull2f_rm">,
676       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
677   def int_nvvm_ull2f_rp : GCCBuiltin<"__nvvm_ull2f_rp">,
678       Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
679
680   def int_nvvm_ll2d_rn : GCCBuiltin<"__nvvm_ll2d_rn">,
681       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
682   def int_nvvm_ll2d_rz : GCCBuiltin<"__nvvm_ll2d_rz">,
683       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
684   def int_nvvm_ll2d_rm : GCCBuiltin<"__nvvm_ll2d_rm">,
685       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
686   def int_nvvm_ll2d_rp : GCCBuiltin<"__nvvm_ll2d_rp">,
687       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
688   def int_nvvm_ull2d_rn : GCCBuiltin<"__nvvm_ull2d_rn">,
689       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
690   def int_nvvm_ull2d_rz : GCCBuiltin<"__nvvm_ull2d_rz">,
691       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
692   def int_nvvm_ull2d_rm : GCCBuiltin<"__nvvm_ull2d_rm">,
693       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
694   def int_nvvm_ull2d_rp : GCCBuiltin<"__nvvm_ull2d_rp">,
695       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
696
697   def int_nvvm_f2h_rn_ftz : GCCBuiltin<"__nvvm_f2h_rn_ftz">,
698       Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
699   def int_nvvm_f2h_rn : GCCBuiltin<"__nvvm_f2h_rn">,
700       Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
701
702   def int_nvvm_h2f : GCCBuiltin<"__nvvm_h2f">,
703       Intrinsic<[llvm_float_ty], [llvm_i16_ty], [IntrNoMem]>;
704
705 //
706 // Bitcast
707 //
708
709   def int_nvvm_bitcast_f2i : GCCBuiltin<"__nvvm_bitcast_f2i">,
710       Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
711   def int_nvvm_bitcast_i2f : GCCBuiltin<"__nvvm_bitcast_i2f">,
712       Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
713
714   def int_nvvm_bitcast_ll2d : GCCBuiltin<"__nvvm_bitcast_ll2d">,
715       Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
716   def int_nvvm_bitcast_d2ll : GCCBuiltin<"__nvvm_bitcast_d2ll">,
717       Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
718
719
720 // Atomic not available as an llvm intrinsic.
721   def int_nvvm_atomic_load_add_f32 : Intrinsic<[llvm_float_ty],
722           [LLVMAnyPointerType<llvm_float_ty>, llvm_float_ty],
723                                       [IntrReadWriteArgMem, NoCapture<0>]>;
724   def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
725           [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
726                                       [IntrReadWriteArgMem, NoCapture<0>]>;
727   def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
728           [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
729                                       [IntrReadWriteArgMem, NoCapture<0>]>;
730
731 // Bar.Sync
732   def int_cuda_syncthreads : GCCBuiltin<"__syncthreads">,
733       Intrinsic<[], [], [IntrNoDuplicate]>;
734   def int_nvvm_barrier0 : GCCBuiltin<"__nvvm_bar0">,
735       Intrinsic<[], [], [IntrNoDuplicate]>;
736   def int_nvvm_barrier0_popc : GCCBuiltin<"__nvvm_bar0_popc">,
737       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
738   def int_nvvm_barrier0_and : GCCBuiltin<"__nvvm_bar0_and">,
739       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
740   def int_nvvm_barrier0_or : GCCBuiltin<"__nvvm_bar0_or">,
741       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
742
743   // Membar
744   def int_nvvm_membar_cta : GCCBuiltin<"__nvvm_membar_cta">,
745       Intrinsic<[], [], []>;
746   def int_nvvm_membar_gl : GCCBuiltin<"__nvvm_membar_gl">,
747       Intrinsic<[], [], []>;
748   def int_nvvm_membar_sys : GCCBuiltin<"__nvvm_membar_sys">,
749       Intrinsic<[], [], []>;
750
751
752 // Accessing special registers
753   def int_nvvm_read_ptx_sreg_tid_x :
754       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
755       GCCBuiltin<"__nvvm_read_ptx_sreg_tid_x">;
756   def int_nvvm_read_ptx_sreg_tid_y :
757       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
758       GCCBuiltin<"__nvvm_read_ptx_sreg_tid_y">;
759   def int_nvvm_read_ptx_sreg_tid_z :
760       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
761       GCCBuiltin<"__nvvm_read_ptx_sreg_tid_z">;
762
763   def int_nvvm_read_ptx_sreg_ntid_x :
764       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
765       GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_x">;
766   def int_nvvm_read_ptx_sreg_ntid_y :
767       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
768       GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_y">;
769   def int_nvvm_read_ptx_sreg_ntid_z :
770       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
771       GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_z">;
772
773   def int_nvvm_read_ptx_sreg_ctaid_x :
774       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
775       GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_x">;
776   def int_nvvm_read_ptx_sreg_ctaid_y :
777       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
778       GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_y">;
779   def int_nvvm_read_ptx_sreg_ctaid_z :
780       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
781       GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_z">;
782
783   def int_nvvm_read_ptx_sreg_nctaid_x :
784       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
785       GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_x">;
786   def int_nvvm_read_ptx_sreg_nctaid_y :
787       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
788       GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_y">;
789   def int_nvvm_read_ptx_sreg_nctaid_z :
790       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
791       GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_z">;
792
793   def int_nvvm_read_ptx_sreg_warpsize :
794       Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
795       GCCBuiltin<"__nvvm_read_ptx_sreg_warpsize">;
796
797
798 // Generated within nvvm. Use for ldu on sm_20 or later
799 def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
800   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
801   "llvm.nvvm.ldu.global.i">;
802 def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
803   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
804   "llvm.nvvm.ldu.global.f">;
805 def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
806   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
807   "llvm.nvvm.ldu.global.p">;
808
809 // Generated within nvvm. Use for ldg on sm_35 or later
810 def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
811   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
812   "llvm.nvvm.ldg.global.i">;
813 def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
814   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
815   "llvm.nvvm.ldg.global.f">;
816 def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
817   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
818   "llvm.nvvm.ldg.global.p">;
819
820 // Use for generic pointers
821 // - These intrinsics are used to convert address spaces.
822 // - The input pointer and output pointer must have the same type, except for
823 //   the address-space. (This restriction is not enforced here as there is
824 //   currently no way to describe it).
825 // - This complements the llvm bitcast, which can be used to cast one type
826 //   of pointer to another type of pointer, while the address space remains
827 //   the same.
828 def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
829                  [llvm_anyptr_ty], [IntrNoMem],
830                  "llvm.nvvm.ptr.local.to.gen">;
831 def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
832                  [llvm_anyptr_ty], [IntrNoMem],
833                  "llvm.nvvm.ptr.shared.to.gen">;
834 def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
835                  [llvm_anyptr_ty], [IntrNoMem],
836                  "llvm.nvvm.ptr.global.to.gen">;
837 def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
838                  [llvm_anyptr_ty], [IntrNoMem],
839                  "llvm.nvvm.ptr.constant.to.gen">;
840
841 def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
842                  [llvm_anyptr_ty], [IntrNoMem],
843                  "llvm.nvvm.ptr.gen.to.global">;
844 def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
845                  [llvm_anyptr_ty], [IntrNoMem],
846                  "llvm.nvvm.ptr.gen.to.shared">;
847 def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
848                  [llvm_anyptr_ty], [IntrNoMem],
849                  "llvm.nvvm.ptr.gen.to.local">;
850 def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty],
851                  [llvm_anyptr_ty], [IntrNoMem],
852                  "llvm.nvvm.ptr.gen.to.constant">;
853
854 // Used in nvvm internally to help address space opt and ptx code generation
855 // This is for params that are passed to kernel functions by pointer by-val.
856 def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
857                                      [llvm_anyptr_ty],
858                                    [IntrNoMem],
859                                    "llvm.nvvm.ptr.gen.to.param">;
860
861 // Move intrinsics, used in nvvm internally
862
863 def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
864   "llvm.nvvm.move.i16">;
865 def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
866   "llvm.nvvm.move.i32">;
867 def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
868   "llvm.nvvm.move.i64">;
869 def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
870   [IntrNoMem], "llvm.nvvm.move.float">;
871 def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
872   [IntrNoMem], "llvm.nvvm.move.double">;
873 def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
874   [IntrNoMem, NoCapture<0>], "llvm.nvvm.move.ptr">;
875
876
877 // For getting the handle from a texture or surface variable
878 def int_nvvm_texsurf_handle
879   : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyi64ptr_ty],
880               [IntrNoMem], "llvm.nvvm.texsurf.handle">;
881 def int_nvvm_texsurf_handle_internal
882   : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
883               [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
884
885 /// Error / Warn
886 def int_nvvm_compiler_error :
887     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
888 def int_nvvm_compiler_warn :
889     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
890
891 def int_nvvm_reflect :
892   Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty], [IntrNoMem], "llvm.nvvm.reflect">;
893
894 // isspacep.{const, global, local, shared}
895 def int_nvvm_isspacep_const
896   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
897               "llvm.nvvm.isspacep.const">,
898     GCCBuiltin<"__nvvm_isspacep_const">;
899 def int_nvvm_isspacep_global
900   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
901               "llvm.nvvm.isspacep.global">,
902     GCCBuiltin<"__nvvm_isspacep_global">;
903 def int_nvvm_isspacep_local
904   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
905               "llvm.nvvm.isspacep.local">,
906     GCCBuiltin<"__nvvm_isspacep_local">;
907 def int_nvvm_isspacep_shared
908   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
909               "llvm.nvvm.isspacep.shared">,
910     GCCBuiltin<"__nvvm_isspacep_shared">;
911
912 // Environment register read
913 def int_nvvm_read_ptx_sreg_envreg0
914   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
915               "llvm.nvvm.read.ptx.sreg.envreg0">,
916     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
917 def int_nvvm_read_ptx_sreg_envreg1
918   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
919               "llvm.nvvm.read.ptx.sreg.envreg1">,
920     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
921 def int_nvvm_read_ptx_sreg_envreg2
922   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
923               "llvm.nvvm.read.ptx.sreg.envreg2">,
924     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
925 def int_nvvm_read_ptx_sreg_envreg3
926   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
927               "llvm.nvvm.read.ptx.sreg.envreg3">,
928     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
929 def int_nvvm_read_ptx_sreg_envreg4
930   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
931               "llvm.nvvm.read.ptx.sreg.envreg4">,
932     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
933 def int_nvvm_read_ptx_sreg_envreg5
934   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
935               "llvm.nvvm.read.ptx.sreg.envreg5">,
936     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
937 def int_nvvm_read_ptx_sreg_envreg6
938   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
939               "llvm.nvvm.read.ptx.sreg.envreg6">,
940     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
941 def int_nvvm_read_ptx_sreg_envreg7
942   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
943               "llvm.nvvm.read.ptx.sreg.envreg7">,
944     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
945 def int_nvvm_read_ptx_sreg_envreg8
946   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
947               "llvm.nvvm.read.ptx.sreg.envreg8">,
948     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
949 def int_nvvm_read_ptx_sreg_envreg9
950   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
951               "llvm.nvvm.read.ptx.sreg.envreg9">,
952     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
953 def int_nvvm_read_ptx_sreg_envreg10
954   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
955               "llvm.nvvm.read.ptx.sreg.envreg10">,
956     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
957 def int_nvvm_read_ptx_sreg_envreg11
958   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
959               "llvm.nvvm.read.ptx.sreg.envreg11">,
960     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
961 def int_nvvm_read_ptx_sreg_envreg12
962   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
963               "llvm.nvvm.read.ptx.sreg.envreg12">,
964     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
965 def int_nvvm_read_ptx_sreg_envreg13
966   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
967               "llvm.nvvm.read.ptx.sreg.envreg13">,
968     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
969 def int_nvvm_read_ptx_sreg_envreg14
970   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
971               "llvm.nvvm.read.ptx.sreg.envreg14">,
972     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
973 def int_nvvm_read_ptx_sreg_envreg15
974   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
975               "llvm.nvvm.read.ptx.sreg.envreg15">,
976     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
977 def int_nvvm_read_ptx_sreg_envreg16
978   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
979               "llvm.nvvm.read.ptx.sreg.envreg16">,
980     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
981 def int_nvvm_read_ptx_sreg_envreg17
982   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
983               "llvm.nvvm.read.ptx.sreg.envreg17">,
984     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
985 def int_nvvm_read_ptx_sreg_envreg18
986   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
987               "llvm.nvvm.read.ptx.sreg.envreg18">,
988     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
989 def int_nvvm_read_ptx_sreg_envreg19
990   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
991               "llvm.nvvm.read.ptx.sreg.envreg19">,
992     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
993 def int_nvvm_read_ptx_sreg_envreg20
994   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
995               "llvm.nvvm.read.ptx.sreg.envreg20">,
996     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
997 def int_nvvm_read_ptx_sreg_envreg21
998   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
999               "llvm.nvvm.read.ptx.sreg.envreg21">,
1000     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
1001 def int_nvvm_read_ptx_sreg_envreg22
1002   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1003               "llvm.nvvm.read.ptx.sreg.envreg22">,
1004     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1005 def int_nvvm_read_ptx_sreg_envreg23
1006   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1007               "llvm.nvvm.read.ptx.sreg.envreg23">,
1008     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1009 def int_nvvm_read_ptx_sreg_envreg24
1010   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1011               "llvm.nvvm.read.ptx.sreg.envreg24">,
1012     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1013 def int_nvvm_read_ptx_sreg_envreg25
1014   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1015               "llvm.nvvm.read.ptx.sreg.envreg25">,
1016     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1017 def int_nvvm_read_ptx_sreg_envreg26
1018   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1019               "llvm.nvvm.read.ptx.sreg.envreg26">,
1020     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1021 def int_nvvm_read_ptx_sreg_envreg27
1022   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1023               "llvm.nvvm.read.ptx.sreg.envreg27">,
1024     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1025 def int_nvvm_read_ptx_sreg_envreg28
1026   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1027               "llvm.nvvm.read.ptx.sreg.envreg28">,
1028     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1029 def int_nvvm_read_ptx_sreg_envreg29
1030   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1031               "llvm.nvvm.read.ptx.sreg.envreg29">,
1032     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1033 def int_nvvm_read_ptx_sreg_envreg30
1034   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1035               "llvm.nvvm.read.ptx.sreg.envreg30">,
1036     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1037 def int_nvvm_read_ptx_sreg_envreg31
1038   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1039               "llvm.nvvm.read.ptx.sreg.envreg31">,
1040     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1041
1042
1043 // Texture Fetch
1044 // texmode_independent
1045 def int_nvvm_tex_1d_v4f32_s32
1046   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1047               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1048               "llvm.nvvm.tex.1d.v4f32.s32">;
1049 def int_nvvm_tex_1d_v4f32_f32
1050   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1051               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1052               "llvm.nvvm.tex.1d.v4f32.f32">;
1053 def int_nvvm_tex_1d_level_v4f32_f32
1054   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1055               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1056               "llvm.nvvm.tex.1d.level.v4f32.f32">;
1057 def int_nvvm_tex_1d_grad_v4f32_f32
1058   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1059               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1060                llvm_float_ty], [],
1061               "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1062 def int_nvvm_tex_1d_v4s32_s32
1063   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1064               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1065               "llvm.nvvm.tex.1d.v4s32.s32">;
1066 def int_nvvm_tex_1d_v4s32_f32
1067   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1068               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1069               "llvm.nvvm.tex.1d.v4s32.f32">;
1070 def int_nvvm_tex_1d_level_v4s32_f32
1071   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1072               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1073               "llvm.nvvm.tex.1d.level.v4s32.f32">;
1074 def int_nvvm_tex_1d_grad_v4s32_f32
1075   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1076               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1077                llvm_float_ty], [],
1078               "llvm.nvvm.tex.1d.grad.v4s32.f32">;
1079 def int_nvvm_tex_1d_v4u32_s32
1080   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1081               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1082               "llvm.nvvm.tex.1d.v4u32.s32">;
1083 def int_nvvm_tex_1d_v4u32_f32
1084   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1085               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1086               "llvm.nvvm.tex.1d.v4u32.f32">;
1087 def int_nvvm_tex_1d_level_v4u32_f32
1088   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1089               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1090               "llvm.nvvm.tex.1d.level.v4u32.f32">;
1091 def int_nvvm_tex_1d_grad_v4u32_f32
1092   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1093               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1094                llvm_float_ty], [],
1095               "llvm.nvvm.tex.1d.grad.v4u32.f32">;
1096
1097 def int_nvvm_tex_1d_array_v4f32_s32
1098   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1099               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1100               "llvm.nvvm.tex.1d.array.v4f32.s32">;
1101 def int_nvvm_tex_1d_array_v4f32_f32
1102   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1103               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1104               "llvm.nvvm.tex.1d.array.v4f32.f32">;
1105 def int_nvvm_tex_1d_array_level_v4f32_f32
1106   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1107               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1108                llvm_float_ty], [],
1109               "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1110 def int_nvvm_tex_1d_array_grad_v4f32_f32
1111   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1112               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1113                llvm_float_ty, llvm_float_ty], [],
1114               "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1115 def int_nvvm_tex_1d_array_v4s32_s32
1116   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1117               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1118               "llvm.nvvm.tex.1d.array.v4s32.s32">;
1119 def int_nvvm_tex_1d_array_v4s32_f32
1120   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1121               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1122               "llvm.nvvm.tex.1d.array.v4s32.f32">;
1123 def int_nvvm_tex_1d_array_level_v4s32_f32
1124   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1125               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1126                llvm_float_ty], [],
1127               "llvm.nvvm.tex.1d.array.level.v4s32.f32">;
1128 def int_nvvm_tex_1d_array_grad_v4s32_f32
1129   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1130               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1131                llvm_float_ty, llvm_float_ty], [],
1132               "llvm.nvvm.tex.1d.array.grad.v4s32.f32">;
1133 def int_nvvm_tex_1d_array_v4u32_s32
1134   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1135               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1136               "llvm.nvvm.tex.1d.array.v4u32.s32">;
1137 def int_nvvm_tex_1d_array_v4u32_f32
1138   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1139               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1140               "llvm.nvvm.tex.1d.array.v4u32.f32">;
1141 def int_nvvm_tex_1d_array_level_v4u32_f32
1142   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1143               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1144                llvm_float_ty], [],
1145               "llvm.nvvm.tex.1d.array.level.v4u32.f32">;
1146 def int_nvvm_tex_1d_array_grad_v4u32_f32
1147   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1148               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1149                llvm_float_ty, llvm_float_ty], [],
1150               "llvm.nvvm.tex.1d.array.grad.v4u32.f32">;
1151
1152 def int_nvvm_tex_2d_v4f32_s32
1153   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1154               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1155               "llvm.nvvm.tex.2d.v4f32.s32">;
1156 def int_nvvm_tex_2d_v4f32_f32
1157   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1158               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1159               "llvm.nvvm.tex.2d.v4f32.f32">;
1160 def int_nvvm_tex_2d_level_v4f32_f32
1161   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1162               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1163                llvm_float_ty], [],
1164               "llvm.nvvm.tex.2d.level.v4f32.f32">;
1165 def int_nvvm_tex_2d_grad_v4f32_f32
1166   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1167               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1168                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1169               "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1170 def int_nvvm_tex_2d_v4s32_s32
1171   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1172               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1173               "llvm.nvvm.tex.2d.v4s32.s32">;
1174 def int_nvvm_tex_2d_v4s32_f32
1175   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1176               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1177               "llvm.nvvm.tex.2d.v4s32.f32">;
1178 def int_nvvm_tex_2d_level_v4s32_f32
1179   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1180               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1181                llvm_float_ty], [],
1182               "llvm.nvvm.tex.2d.level.v4s32.f32">;
1183 def int_nvvm_tex_2d_grad_v4s32_f32
1184   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1185               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1186                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1187               "llvm.nvvm.tex.2d.grad.v4s32.f32">;
1188 def int_nvvm_tex_2d_v4u32_s32
1189   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1190               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1191               "llvm.nvvm.tex.2d.v4u32.s32">;
1192 def int_nvvm_tex_2d_v4u32_f32
1193   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1194               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1195               "llvm.nvvm.tex.2d.v4u32.f32">;
1196 def int_nvvm_tex_2d_level_v4u32_f32
1197   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1198               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1199                llvm_float_ty], [],
1200               "llvm.nvvm.tex.2d.level.v4u32.f32">;
1201 def int_nvvm_tex_2d_grad_v4u32_f32
1202   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1203               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1204                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1205               "llvm.nvvm.tex.2d.grad.v4u32.f32">;
1206
1207 def int_nvvm_tex_2d_array_v4f32_s32
1208   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1209               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1210                llvm_i32_ty], [],
1211               "llvm.nvvm.tex.2d.array.v4f32.s32">;
1212 def int_nvvm_tex_2d_array_v4f32_f32
1213   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1214               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1215                llvm_float_ty], [],
1216               "llvm.nvvm.tex.2d.array.v4f32.f32">;
1217 def int_nvvm_tex_2d_array_level_v4f32_f32
1218   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1219               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1220                llvm_float_ty, llvm_float_ty], [],
1221               "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1222 def int_nvvm_tex_2d_array_grad_v4f32_f32
1223   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1224               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1225                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1226                llvm_float_ty], [],
1227               "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1228 def int_nvvm_tex_2d_array_v4s32_s32
1229   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1230               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1231                llvm_i32_ty], [],
1232               "llvm.nvvm.tex.2d.array.v4s32.s32">;
1233 def int_nvvm_tex_2d_array_v4s32_f32
1234   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1235               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1236                llvm_float_ty], [],
1237               "llvm.nvvm.tex.2d.array.v4s32.f32">;
1238 def int_nvvm_tex_2d_array_level_v4s32_f32
1239   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1240               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1241                llvm_float_ty, llvm_float_ty], [],
1242               "llvm.nvvm.tex.2d.array.level.v4s32.f32">;
1243 def int_nvvm_tex_2d_array_grad_v4s32_f32
1244   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1245               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1246                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1247                llvm_float_ty], [],
1248               "llvm.nvvm.tex.2d.array.grad.v4s32.f32">;
1249 def int_nvvm_tex_2d_array_v4u32_s32
1250   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1251               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1252                llvm_i32_ty], [],
1253               "llvm.nvvm.tex.2d.array.v4u32.s32">;
1254 def int_nvvm_tex_2d_array_v4u32_f32
1255   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1256               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1257                llvm_float_ty], [],
1258               "llvm.nvvm.tex.2d.array.v4u32.f32">;
1259 def int_nvvm_tex_2d_array_level_v4u32_f32
1260   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1261               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1262                llvm_float_ty, llvm_float_ty], [],
1263               "llvm.nvvm.tex.2d.array.level.v4u32.f32">;
1264 def int_nvvm_tex_2d_array_grad_v4u32_f32
1265   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1266               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1267                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1268                llvm_float_ty], [],
1269               "llvm.nvvm.tex.2d.array.grad.v4u32.f32">;
1270
1271 def int_nvvm_tex_3d_v4f32_s32
1272   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1273               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1274               [], "llvm.nvvm.tex.3d.v4f32.s32">;
1275 def int_nvvm_tex_3d_v4f32_f32
1276   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1277               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1278                llvm_float_ty], [],
1279               "llvm.nvvm.tex.3d.v4f32.f32">;
1280 def int_nvvm_tex_3d_level_v4f32_f32
1281   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1282               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1283                llvm_float_ty, llvm_float_ty], [],
1284               "llvm.nvvm.tex.3d.level.v4f32.f32">;
1285 def int_nvvm_tex_3d_grad_v4f32_f32
1286   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1287               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1288                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1289                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1290               "llvm.nvvm.tex.3d.grad.v4f32.f32">;
1291 def int_nvvm_tex_3d_v4s32_s32
1292   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1293               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1294               [], "llvm.nvvm.tex.3d.v4s32.s32">;
1295 def int_nvvm_tex_3d_v4s32_f32
1296   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1297               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1298                llvm_float_ty], [],
1299               "llvm.nvvm.tex.3d.v4s32.f32">;
1300 def int_nvvm_tex_3d_level_v4s32_f32
1301   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1302               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1303                llvm_float_ty, llvm_float_ty], [],
1304               "llvm.nvvm.tex.3d.level.v4s32.f32">;
1305 def int_nvvm_tex_3d_grad_v4s32_f32
1306   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1307               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1308                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1309                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1310               "llvm.nvvm.tex.3d.grad.v4s32.f32">;
1311 def int_nvvm_tex_3d_v4u32_s32
1312   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1313               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1314               [], "llvm.nvvm.tex.3d.v4u32.s32">;
1315 def int_nvvm_tex_3d_v4u32_f32
1316   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1317               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1318                llvm_float_ty], [],
1319               "llvm.nvvm.tex.3d.v4u32.f32">;
1320 def int_nvvm_tex_3d_level_v4u32_f32
1321   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1322               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1323                llvm_float_ty, llvm_float_ty], [],
1324               "llvm.nvvm.tex.3d.level.v4u32.f32">;
1325 def int_nvvm_tex_3d_grad_v4u32_f32
1326   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1327               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1328                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1329                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1330               "llvm.nvvm.tex.3d.grad.v4u32.f32">;
1331
1332 def int_nvvm_tex_cube_v4f32_f32
1333   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1334               [llvm_i64_ty, llvm_i64_ty,
1335                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1336               "llvm.nvvm.tex.cube.v4f32.f32">;
1337 def int_nvvm_tex_cube_level_v4f32_f32
1338   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1339               [llvm_i64_ty, llvm_i64_ty,
1340                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1341               "llvm.nvvm.tex.cube.level.v4f32.f32">;
1342 def int_nvvm_tex_cube_v4s32_f32
1343   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1344               [llvm_i64_ty, llvm_i64_ty,
1345                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1346               "llvm.nvvm.tex.cube.v4s32.f32">;
1347 def int_nvvm_tex_cube_level_v4s32_f32
1348   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1349               [llvm_i64_ty, llvm_i64_ty,
1350                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1351               "llvm.nvvm.tex.cube.level.v4s32.f32">;
1352 def int_nvvm_tex_cube_v4u32_f32
1353   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1354               [llvm_i64_ty, llvm_i64_ty,
1355                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1356               "llvm.nvvm.tex.cube.v4u32.f32">;
1357 def int_nvvm_tex_cube_level_v4u32_f32
1358   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1359               [llvm_i64_ty, llvm_i64_ty,
1360                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1361               "llvm.nvvm.tex.cube.level.v4u32.f32">;
1362
1363 def int_nvvm_tex_cube_array_v4f32_f32
1364   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1365               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1366                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1367               "llvm.nvvm.tex.cube.array.v4f32.f32">;
1368 def int_nvvm_tex_cube_array_level_v4f32_f32
1369   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1370               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1371                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1372               "llvm.nvvm.tex.cube.array.level.v4f32.f32">;
1373 def int_nvvm_tex_cube_array_v4s32_f32
1374   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1375               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1376                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1377               "llvm.nvvm.tex.cube.array.v4s32.f32">;
1378 def int_nvvm_tex_cube_array_level_v4s32_f32
1379   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1380               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1381                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1382               "llvm.nvvm.tex.cube.array.level.v4s32.f32">;
1383 def int_nvvm_tex_cube_array_v4u32_f32
1384   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1385               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1386                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1387               "llvm.nvvm.tex.cube.array.v4u32.f32">;
1388 def int_nvvm_tex_cube_array_level_v4u32_f32
1389   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1390               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1391                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1392               "llvm.nvvm.tex.cube.array.level.v4u32.f32">;
1393
1394 def int_nvvm_tld4_r_2d_v4f32_f32
1395   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1396               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1397               "llvm.nvvm.tld4.r.2d.v4f32.f32">;
1398 def int_nvvm_tld4_g_2d_v4f32_f32
1399   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1400               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1401               "llvm.nvvm.tld4.g.2d.v4f32.f32">;
1402 def int_nvvm_tld4_b_2d_v4f32_f32
1403   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1404               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1405               "llvm.nvvm.tld4.b.2d.v4f32.f32">;
1406 def int_nvvm_tld4_a_2d_v4f32_f32
1407   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1408               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1409               "llvm.nvvm.tld4.a.2d.v4f32.f32">;
1410 def int_nvvm_tld4_r_2d_v4s32_f32
1411   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1412               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1413               "llvm.nvvm.tld4.r.2d.v4s32.f32">;
1414 def int_nvvm_tld4_g_2d_v4s32_f32
1415   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1416               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1417               "llvm.nvvm.tld4.g.2d.v4s32.f32">;
1418 def int_nvvm_tld4_b_2d_v4s32_f32
1419   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1420               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1421               "llvm.nvvm.tld4.b.2d.v4s32.f32">;
1422 def int_nvvm_tld4_a_2d_v4s32_f32
1423   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1424               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1425               "llvm.nvvm.tld4.a.2d.v4s32.f32">;
1426 def int_nvvm_tld4_r_2d_v4u32_f32
1427   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1428               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1429               "llvm.nvvm.tld4.r.2d.v4u32.f32">;
1430 def int_nvvm_tld4_g_2d_v4u32_f32
1431   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1432               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1433               "llvm.nvvm.tld4.g.2d.v4u32.f32">;
1434 def int_nvvm_tld4_b_2d_v4u32_f32
1435   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1436               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1437               "llvm.nvvm.tld4.b.2d.v4u32.f32">;
1438 def int_nvvm_tld4_a_2d_v4u32_f32
1439   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1440               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1441               "llvm.nvvm.tld4.a.2d.v4u32.f32">;
1442
1443
1444 // texmode_unified
1445 def int_nvvm_tex_unified_1d_v4f32_s32
1446   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1447               [llvm_i64_ty, llvm_i32_ty], [],
1448               "llvm.nvvm.tex.unified.1d.v4f32.s32">;
1449 def int_nvvm_tex_unified_1d_v4f32_f32
1450   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1451               [llvm_i64_ty, llvm_float_ty], [],
1452               "llvm.nvvm.tex.unified.1d.v4f32.f32">;
1453 def int_nvvm_tex_unified_1d_level_v4f32_f32
1454   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1455               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1456               "llvm.nvvm.tex.unified.1d.level.v4f32.f32">;
1457 def int_nvvm_tex_unified_1d_grad_v4f32_f32
1458   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1459               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1460                llvm_float_ty], [],
1461               "llvm.nvvm.tex.unified.1d.grad.v4f32.f32">;
1462 def int_nvvm_tex_unified_1d_v4s32_s32
1463   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1464               [llvm_i64_ty, llvm_i32_ty], [],
1465               "llvm.nvvm.tex.unified.1d.v4s32.s32">;
1466 def int_nvvm_tex_unified_1d_v4s32_f32
1467   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1468               [llvm_i64_ty, llvm_float_ty], [],
1469               "llvm.nvvm.tex.unified.1d.v4s32.f32">;
1470 def int_nvvm_tex_unified_1d_level_v4s32_f32
1471   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1472               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1473               "llvm.nvvm.tex.unified.1d.level.v4s32.f32">;
1474 def int_nvvm_tex_unified_1d_grad_v4s32_f32
1475   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1476               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1477                llvm_float_ty], [],
1478               "llvm.nvvm.tex.unified.1d.grad.v4s32.f32">;
1479 def int_nvvm_tex_unified_1d_v4u32_s32
1480   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1481               [llvm_i64_ty, llvm_i32_ty], [],
1482               "llvm.nvvm.tex.unified.1d.v4u32.s32">;
1483 def int_nvvm_tex_unified_1d_v4u32_f32
1484   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1485               [llvm_i64_ty, llvm_float_ty], [],
1486               "llvm.nvvm.tex.unified.1d.v4u32.f32">;
1487 def int_nvvm_tex_unified_1d_level_v4u32_f32
1488   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1489               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1490               "llvm.nvvm.tex.unified.1d.level.v4u32.f32">;
1491 def int_nvvm_tex_unified_1d_grad_v4u32_f32
1492   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1493               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1494                llvm_float_ty], [],
1495               "llvm.nvvm.tex.unified.1d.grad.v4u32.f32">;
1496
1497 def int_nvvm_tex_unified_1d_array_v4f32_s32
1498   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1499               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1500               "llvm.nvvm.tex.unified.1d.array.v4f32.s32">;
1501 def int_nvvm_tex_unified_1d_array_v4f32_f32
1502   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1503               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1504               "llvm.nvvm.tex.unified.1d.array.v4f32.f32">;
1505 def int_nvvm_tex_unified_1d_array_level_v4f32_f32
1506   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1507               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1508                llvm_float_ty], [],
1509               "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32">;
1510 def int_nvvm_tex_unified_1d_array_grad_v4f32_f32
1511   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1512               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1513                llvm_float_ty, llvm_float_ty], [],
1514               "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32">;
1515 def int_nvvm_tex_unified_1d_array_v4s32_s32
1516   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1517               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1518               "llvm.nvvm.tex.unified.1d.array.v4s32.s32">;
1519 def int_nvvm_tex_unified_1d_array_v4s32_f32
1520   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1521               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1522               "llvm.nvvm.tex.unified.1d.array.v4s32.f32">;
1523 def int_nvvm_tex_unified_1d_array_level_v4s32_f32
1524   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1525               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1526                llvm_float_ty], [],
1527               "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32">;
1528 def int_nvvm_tex_unified_1d_array_grad_v4s32_f32
1529   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1530               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1531                llvm_float_ty, llvm_float_ty], [],
1532               "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32">;
1533 def int_nvvm_tex_unified_1d_array_v4u32_s32
1534   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1535               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1536               "llvm.nvvm.tex.unified.1d.array.v4u32.s32">;
1537 def int_nvvm_tex_unified_1d_array_v4u32_f32
1538   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1539               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1540               "llvm.nvvm.tex.unified.1d.array.v4u32.f32">;
1541 def int_nvvm_tex_unified_1d_array_level_v4u32_f32
1542   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1543               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1544                llvm_float_ty], [],
1545               "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32">;
1546 def int_nvvm_tex_unified_1d_array_grad_v4u32_f32
1547   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1548               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1549                llvm_float_ty, llvm_float_ty], [],
1550               "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32">;
1551
1552 def int_nvvm_tex_unified_2d_v4f32_s32
1553   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1554               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1555               "llvm.nvvm.tex.unified.2d.v4f32.s32">;
1556 def int_nvvm_tex_unified_2d_v4f32_f32
1557   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1558               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1559               "llvm.nvvm.tex.unified.2d.v4f32.f32">;
1560 def int_nvvm_tex_unified_2d_level_v4f32_f32
1561   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1562               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1563                llvm_float_ty], [],
1564               "llvm.nvvm.tex.unified.2d.level.v4f32.f32">;
1565 def int_nvvm_tex_unified_2d_grad_v4f32_f32
1566   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1567               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1568                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1569               "llvm.nvvm.tex.unified.2d.grad.v4f32.f32">;
1570 def int_nvvm_tex_unified_2d_v4s32_s32
1571   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1572               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1573               "llvm.nvvm.tex.unified.2d.v4s32.s32">;
1574 def int_nvvm_tex_unified_2d_v4s32_f32
1575   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1576               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1577               "llvm.nvvm.tex.unified.2d.v4s32.f32">;
1578 def int_nvvm_tex_unified_2d_level_v4s32_f32
1579   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1580               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1581                llvm_float_ty], [],
1582               "llvm.nvvm.tex.unified.2d.level.v4s32.f32">;
1583 def int_nvvm_tex_unified_2d_grad_v4s32_f32
1584   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1585               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1586                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1587               "llvm.nvvm.tex.unified.2d.grad.v4s32.f32">;
1588 def int_nvvm_tex_unified_2d_v4u32_s32
1589   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1590               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1591               "llvm.nvvm.tex.unified.2d.v4u32.s32">;
1592 def int_nvvm_tex_unified_2d_v4u32_f32
1593   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1594               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1595               "llvm.nvvm.tex.unified.2d.v4u32.f32">;
1596 def int_nvvm_tex_unified_2d_level_v4u32_f32
1597   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1598               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1599                llvm_float_ty], [],
1600               "llvm.nvvm.tex.unified.2d.level.v4u32.f32">;
1601 def int_nvvm_tex_unified_2d_grad_v4u32_f32
1602   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1603               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1604                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1605               "llvm.nvvm.tex.unified.2d.grad.v4u32.f32">;
1606
1607 def int_nvvm_tex_unified_2d_array_v4f32_s32
1608   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1609               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1610                llvm_i32_ty], [],
1611               "llvm.nvvm.tex.unified.2d.array.v4f32.s32">;
1612 def int_nvvm_tex_unified_2d_array_v4f32_f32
1613   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1614               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1615                llvm_float_ty], [],
1616               "llvm.nvvm.tex.unified.2d.array.v4f32.f32">;
1617 def int_nvvm_tex_unified_2d_array_level_v4f32_f32
1618   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1619               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1620                llvm_float_ty, llvm_float_ty], [],
1621               "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32">;
1622 def int_nvvm_tex_unified_2d_array_grad_v4f32_f32
1623   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1624               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1625                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1626                llvm_float_ty], [],
1627               "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32">;
1628 def int_nvvm_tex_unified_2d_array_v4s32_s32
1629   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1630               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1631                llvm_i32_ty], [],
1632               "llvm.nvvm.tex.unified.2d.array.v4s32.s32">;
1633 def int_nvvm_tex_unified_2d_array_v4s32_f32
1634   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1635               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1636                llvm_float_ty], [],
1637               "llvm.nvvm.tex.unified.2d.array.v4s32.f32">;
1638 def int_nvvm_tex_unified_2d_array_level_v4s32_f32
1639   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1640               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1641                llvm_float_ty, llvm_float_ty], [],
1642               "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32">;
1643 def int_nvvm_tex_unified_2d_array_grad_v4s32_f32
1644   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1645               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1646                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1647                llvm_float_ty], [],
1648               "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32">;
1649 def int_nvvm_tex_unified_2d_array_v4u32_s32
1650   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1651               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1652                llvm_i32_ty], [],
1653               "llvm.nvvm.tex.unified.2d.array.v4u32.s32">;
1654 def int_nvvm_tex_unified_2d_array_v4u32_f32
1655   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1656               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1657                llvm_float_ty], [],
1658               "llvm.nvvm.tex.unified.2d.array.v4u32.f32">;
1659 def int_nvvm_tex_unified_2d_array_level_v4u32_f32
1660   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1661               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1662                llvm_float_ty, llvm_float_ty], [],
1663               "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32">;
1664 def int_nvvm_tex_unified_2d_array_grad_v4u32_f32
1665   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1666               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1667                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1668                llvm_float_ty], [],
1669               "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32">;
1670
1671 def int_nvvm_tex_unified_3d_v4f32_s32
1672   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1673               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1674               [], "llvm.nvvm.tex.unified.3d.v4f32.s32">;
1675 def int_nvvm_tex_unified_3d_v4f32_f32
1676   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1677               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1678                llvm_float_ty], [],
1679               "llvm.nvvm.tex.unified.3d.v4f32.f32">;
1680 def int_nvvm_tex_unified_3d_level_v4f32_f32
1681   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1682               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1683                llvm_float_ty, llvm_float_ty], [],
1684               "llvm.nvvm.tex.unified.3d.level.v4f32.f32">;
1685 def int_nvvm_tex_unified_3d_grad_v4f32_f32
1686   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1687               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1688                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1689                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1690               "llvm.nvvm.tex.unified.3d.grad.v4f32.f32">;
1691 def int_nvvm_tex_unified_3d_v4s32_s32
1692   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1693               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1694               [], "llvm.nvvm.tex.unified.3d.v4s32.s32">;
1695 def int_nvvm_tex_unified_3d_v4s32_f32
1696   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1697               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1698                llvm_float_ty], [],
1699               "llvm.nvvm.tex.unified.3d.v4s32.f32">;
1700 def int_nvvm_tex_unified_3d_level_v4s32_f32
1701   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1702               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1703                llvm_float_ty, llvm_float_ty], [],
1704               "llvm.nvvm.tex.unified.3d.level.v4s32.f32">;
1705 def int_nvvm_tex_unified_3d_grad_v4s32_f32
1706   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1707               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1708                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1709                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1710               "llvm.nvvm.tex.unified.3d.grad.v4s32.f32">;
1711 def int_nvvm_tex_unified_3d_v4u32_s32
1712   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1713               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1714               [], "llvm.nvvm.tex.unified.3d.v4u32.s32">;
1715 def int_nvvm_tex_unified_3d_v4u32_f32
1716   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1717               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1718                llvm_float_ty], [],
1719               "llvm.nvvm.tex.unified.3d.v4u32.f32">;
1720 def int_nvvm_tex_unified_3d_level_v4u32_f32
1721   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1722               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1723                llvm_float_ty, llvm_float_ty], [],
1724               "llvm.nvvm.tex.unified.3d.level.v4u32.f32">;
1725 def int_nvvm_tex_unified_3d_grad_v4u32_f32
1726   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1727               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1728                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1729                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1730               "llvm.nvvm.tex.unified.3d.grad.v4u32.f32">;
1731
1732 def int_nvvm_tex_unified_cube_v4f32_f32
1733   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1734               [llvm_i64_ty,
1735                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1736               "llvm.nvvm.tex.unified.cube.v4f32.f32">;
1737 def int_nvvm_tex_unified_cube_level_v4f32_f32
1738   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1739               [llvm_i64_ty,
1740                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1741               "llvm.nvvm.tex.unified.cube.level.v4f32.f32">;
1742 def int_nvvm_tex_unified_cube_v4s32_f32
1743   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1744               [llvm_i64_ty,
1745                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1746               "llvm.nvvm.tex.unified.cube.v4s32.f32">;
1747 def int_nvvm_tex_unified_cube_level_v4s32_f32
1748   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1749               [llvm_i64_ty,
1750                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1751               "llvm.nvvm.tex.unified.cube.level.v4s32.f32">;
1752 def int_nvvm_tex_unified_cube_v4u32_f32
1753   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1754               [llvm_i64_ty,
1755                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1756               "llvm.nvvm.tex.unified.cube.v4u32.f32">;
1757 def int_nvvm_tex_unified_cube_level_v4u32_f32
1758   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1759               [llvm_i64_ty,
1760                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1761               "llvm.nvvm.tex.unified.cube.level.v4u32.f32">;
1762
1763 def int_nvvm_tex_unified_cube_array_v4f32_f32
1764   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1765               [llvm_i64_ty, llvm_i32_ty,
1766                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1767               "llvm.nvvm.tex.unified.cube.array.v4f32.f32">;
1768 def int_nvvm_tex_unified_cube_array_level_v4f32_f32
1769   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1770               [llvm_i64_ty, llvm_i32_ty,
1771                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1772               "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32">;
1773 def int_nvvm_tex_unified_cube_array_v4s32_f32
1774   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1775               [llvm_i64_ty, llvm_i32_ty,
1776                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1777               "llvm.nvvm.tex.unified.cube.array.v4s32.f32">;
1778 def int_nvvm_tex_unified_cube_array_level_v4s32_f32
1779   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1780               [llvm_i64_ty, llvm_i32_ty,
1781                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1782               "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32">;
1783 def int_nvvm_tex_unified_cube_array_v4u32_f32
1784   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1785               [llvm_i64_ty, llvm_i32_ty,
1786                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1787               "llvm.nvvm.tex.unified.cube.array.v4u32.f32">;
1788 def int_nvvm_tex_unified_cube_array_level_v4u32_f32
1789   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1790               [llvm_i64_ty, llvm_i32_ty,
1791                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1792               "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32">;
1793
1794 def int_nvvm_tld4_unified_r_2d_v4f32_f32
1795   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1796               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1797               "llvm.nvvm.tld4.unified.r.2d.v4f32.f32">;
1798 def int_nvvm_tld4_unified_g_2d_v4f32_f32
1799   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1800               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1801               "llvm.nvvm.tld4.unified.g.2d.v4f32.f32">;
1802 def int_nvvm_tld4_unified_b_2d_v4f32_f32
1803   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1804               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1805               "llvm.nvvm.tld4.unified.b.2d.v4f32.f32">;
1806 def int_nvvm_tld4_unified_a_2d_v4f32_f32
1807   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1808               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1809               "llvm.nvvm.tld4.unified.a.2d.v4f32.f32">;
1810 def int_nvvm_tld4_unified_r_2d_v4s32_f32
1811   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1812               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1813               "llvm.nvvm.tld4.unified.r.2d.v4s32.f32">;
1814 def int_nvvm_tld4_unified_g_2d_v4s32_f32
1815   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1816               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1817               "llvm.nvvm.tld4.unified.g.2d.v4s32.f32">;
1818 def int_nvvm_tld4_unified_b_2d_v4s32_f32
1819   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1820               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1821               "llvm.nvvm.tld4.unified.b.2d.v4s32.f32">;
1822 def int_nvvm_tld4_unified_a_2d_v4s32_f32
1823   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1824               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1825               "llvm.nvvm.tld4.unified.a.2d.v4s32.f32">;
1826 def int_nvvm_tld4_unified_r_2d_v4u32_f32
1827   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1828               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1829               "llvm.nvvm.tld4.unified.r.2d.v4u32.f32">;
1830 def int_nvvm_tld4_unified_g_2d_v4u32_f32
1831   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1832               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1833               "llvm.nvvm.tld4.unified.g.2d.v4u32.f32">;
1834 def int_nvvm_tld4_unified_b_2d_v4u32_f32
1835   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1836               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1837               "llvm.nvvm.tld4.unified.b.2d.v4u32.f32">;
1838 def int_nvvm_tld4_unified_a_2d_v4u32_f32
1839   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1840               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1841               "llvm.nvvm.tld4.unified.a.2d.v4u32.f32">;
1842
1843
1844 //=== Surface Load
1845 // .clamp variants
1846 def int_nvvm_suld_1d_i8_clamp
1847   : Intrinsic<[llvm_i16_ty],
1848               [llvm_i64_ty, llvm_i32_ty], [],
1849               "llvm.nvvm.suld.1d.i8.clamp">;
1850 def int_nvvm_suld_1d_i16_clamp
1851   : Intrinsic<[llvm_i16_ty],
1852               [llvm_i64_ty, llvm_i32_ty], [],
1853               "llvm.nvvm.suld.1d.i16.clamp">;
1854 def int_nvvm_suld_1d_i32_clamp
1855   : Intrinsic<[llvm_i32_ty],
1856               [llvm_i64_ty, llvm_i32_ty], [],
1857               "llvm.nvvm.suld.1d.i32.clamp">;
1858 def int_nvvm_suld_1d_i64_clamp
1859   : Intrinsic<[llvm_i64_ty],
1860               [llvm_i64_ty, llvm_i32_ty], [],
1861               "llvm.nvvm.suld.1d.i64.clamp">;
1862 def int_nvvm_suld_1d_v2i8_clamp
1863   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1864               [llvm_i64_ty, llvm_i32_ty], [],
1865               "llvm.nvvm.suld.1d.v2i8.clamp">;
1866 def int_nvvm_suld_1d_v2i16_clamp
1867   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1868               [llvm_i64_ty, llvm_i32_ty], [],
1869               "llvm.nvvm.suld.1d.v2i16.clamp">;
1870 def int_nvvm_suld_1d_v2i32_clamp
1871   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1872               [llvm_i64_ty, llvm_i32_ty], [],
1873               "llvm.nvvm.suld.1d.v2i32.clamp">;
1874 def int_nvvm_suld_1d_v2i64_clamp
1875   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1876               [llvm_i64_ty, llvm_i32_ty], [],
1877               "llvm.nvvm.suld.1d.v2i64.clamp">;
1878 def int_nvvm_suld_1d_v4i8_clamp
1879   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1880               [llvm_i64_ty, llvm_i32_ty], [],
1881               "llvm.nvvm.suld.1d.v4i8.clamp">;
1882 def int_nvvm_suld_1d_v4i16_clamp
1883   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1884               [llvm_i64_ty, llvm_i32_ty], [],
1885               "llvm.nvvm.suld.1d.v4i16.clamp">;
1886 def int_nvvm_suld_1d_v4i32_clamp
1887   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1888               [llvm_i64_ty, llvm_i32_ty], [],
1889               "llvm.nvvm.suld.1d.v4i32.clamp">;
1890
1891 def int_nvvm_suld_1d_array_i8_clamp
1892   : Intrinsic<[llvm_i16_ty],
1893               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1894               "llvm.nvvm.suld.1d.array.i8.clamp">;
1895 def int_nvvm_suld_1d_array_i16_clamp
1896   : Intrinsic<[llvm_i16_ty],
1897               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1898               "llvm.nvvm.suld.1d.array.i16.clamp">;
1899 def int_nvvm_suld_1d_array_i32_clamp
1900   : Intrinsic<[llvm_i32_ty],
1901               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1902               "llvm.nvvm.suld.1d.array.i32.clamp">;
1903 def int_nvvm_suld_1d_array_i64_clamp
1904   : Intrinsic<[llvm_i64_ty],
1905               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1906               "llvm.nvvm.suld.1d.array.i64.clamp">;
1907 def int_nvvm_suld_1d_array_v2i8_clamp
1908   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1909               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1910               "llvm.nvvm.suld.1d.array.v2i8.clamp">;
1911 def int_nvvm_suld_1d_array_v2i16_clamp
1912   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1913               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1914               "llvm.nvvm.suld.1d.array.v2i16.clamp">;
1915 def int_nvvm_suld_1d_array_v2i32_clamp
1916   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1917               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1918               "llvm.nvvm.suld.1d.array.v2i32.clamp">;
1919 def int_nvvm_suld_1d_array_v2i64_clamp
1920   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1921               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1922               "llvm.nvvm.suld.1d.array.v2i64.clamp">;
1923 def int_nvvm_suld_1d_array_v4i8_clamp
1924   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1925               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1926               "llvm.nvvm.suld.1d.array.v4i8.clamp">;
1927 def int_nvvm_suld_1d_array_v4i16_clamp
1928   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1929               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1930               "llvm.nvvm.suld.1d.array.v4i16.clamp">;
1931 def int_nvvm_suld_1d_array_v4i32_clamp
1932   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1933               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1934               "llvm.nvvm.suld.1d.array.v4i32.clamp">;
1935
1936 def int_nvvm_suld_2d_i8_clamp
1937   : Intrinsic<[llvm_i16_ty],
1938               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1939               "llvm.nvvm.suld.2d.i8.clamp">;
1940 def int_nvvm_suld_2d_i16_clamp
1941   : Intrinsic<[llvm_i16_ty],
1942               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1943               "llvm.nvvm.suld.2d.i16.clamp">;
1944 def int_nvvm_suld_2d_i32_clamp
1945   : Intrinsic<[llvm_i32_ty],
1946               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1947               "llvm.nvvm.suld.2d.i32.clamp">;
1948 def int_nvvm_suld_2d_i64_clamp
1949   : Intrinsic<[llvm_i64_ty],
1950               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1951               "llvm.nvvm.suld.2d.i64.clamp">;
1952 def int_nvvm_suld_2d_v2i8_clamp
1953   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1954               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1955               "llvm.nvvm.suld.2d.v2i8.clamp">;
1956 def int_nvvm_suld_2d_v2i16_clamp
1957   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1958               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1959               "llvm.nvvm.suld.2d.v2i16.clamp">;
1960 def int_nvvm_suld_2d_v2i32_clamp
1961   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1962               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1963               "llvm.nvvm.suld.2d.v2i32.clamp">;
1964 def int_nvvm_suld_2d_v2i64_clamp
1965   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1966               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1967               "llvm.nvvm.suld.2d.v2i64.clamp">;
1968 def int_nvvm_suld_2d_v4i8_clamp
1969   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1970               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1971               "llvm.nvvm.suld.2d.v4i8.clamp">;
1972 def int_nvvm_suld_2d_v4i16_clamp
1973   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1974               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1975               "llvm.nvvm.suld.2d.v4i16.clamp">;
1976 def int_nvvm_suld_2d_v4i32_clamp
1977   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1978               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1979               "llvm.nvvm.suld.2d.v4i32.clamp">;
1980
1981 def int_nvvm_suld_2d_array_i8_clamp
1982   : Intrinsic<[llvm_i16_ty],
1983               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1984               "llvm.nvvm.suld.2d.array.i8.clamp">;
1985 def int_nvvm_suld_2d_array_i16_clamp
1986   : Intrinsic<[llvm_i16_ty],
1987               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1988               "llvm.nvvm.suld.2d.array.i16.clamp">;
1989 def int_nvvm_suld_2d_array_i32_clamp
1990   : Intrinsic<[llvm_i32_ty],
1991               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1992               "llvm.nvvm.suld.2d.array.i32.clamp">;
1993 def int_nvvm_suld_2d_array_i64_clamp
1994   : Intrinsic<[llvm_i64_ty],
1995               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1996               "llvm.nvvm.suld.2d.array.i64.clamp">;
1997 def int_nvvm_suld_2d_array_v2i8_clamp
1998   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1999               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2000               "llvm.nvvm.suld.2d.array.v2i8.clamp">;
2001 def int_nvvm_suld_2d_array_v2i16_clamp
2002   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2003               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2004               "llvm.nvvm.suld.2d.array.v2i16.clamp">;
2005 def int_nvvm_suld_2d_array_v2i32_clamp
2006   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2007               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2008               "llvm.nvvm.suld.2d.array.v2i32.clamp">;
2009 def int_nvvm_suld_2d_array_v2i64_clamp
2010   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2011               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2012               "llvm.nvvm.suld.2d.array.v2i64.clamp">;
2013 def int_nvvm_suld_2d_array_v4i8_clamp
2014   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2015               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2016               "llvm.nvvm.suld.2d.array.v4i8.clamp">;
2017 def int_nvvm_suld_2d_array_v4i16_clamp
2018   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2019               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2020               "llvm.nvvm.suld.2d.array.v4i16.clamp">;
2021 def int_nvvm_suld_2d_array_v4i32_clamp
2022   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2023               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2024               "llvm.nvvm.suld.2d.array.v4i32.clamp">;
2025
2026 def int_nvvm_suld_3d_i8_clamp
2027   : Intrinsic<[llvm_i16_ty],
2028               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2029               "llvm.nvvm.suld.3d.i8.clamp">;
2030 def int_nvvm_suld_3d_i16_clamp
2031   : Intrinsic<[llvm_i16_ty],
2032               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2033               "llvm.nvvm.suld.3d.i16.clamp">;
2034 def int_nvvm_suld_3d_i32_clamp
2035   : Intrinsic<[llvm_i32_ty],
2036               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2037               "llvm.nvvm.suld.3d.i32.clamp">;
2038 def int_nvvm_suld_3d_i64_clamp
2039   : Intrinsic<[llvm_i64_ty],
2040               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2041               "llvm.nvvm.suld.3d.i64.clamp">;
2042 def int_nvvm_suld_3d_v2i8_clamp
2043   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2044               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2045               "llvm.nvvm.suld.3d.v2i8.clamp">;
2046 def int_nvvm_suld_3d_v2i16_clamp
2047   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2048               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2049               "llvm.nvvm.suld.3d.v2i16.clamp">;
2050 def int_nvvm_suld_3d_v2i32_clamp
2051   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2052               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2053               "llvm.nvvm.suld.3d.v2i32.clamp">;
2054 def int_nvvm_suld_3d_v2i64_clamp
2055   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2056               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2057               "llvm.nvvm.suld.3d.v2i64.clamp">;
2058 def int_nvvm_suld_3d_v4i8_clamp
2059   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2060               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2061               "llvm.nvvm.suld.3d.v4i8.clamp">;
2062 def int_nvvm_suld_3d_v4i16_clamp
2063   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2064               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2065               "llvm.nvvm.suld.3d.v4i16.clamp">;
2066 def int_nvvm_suld_3d_v4i32_clamp
2067   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2068               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2069               "llvm.nvvm.suld.3d.v4i32.clamp">;
2070
2071 // .trap variants
2072 def int_nvvm_suld_1d_i8_trap
2073   : Intrinsic<[llvm_i16_ty],
2074               [llvm_i64_ty, llvm_i32_ty], [],
2075               "llvm.nvvm.suld.1d.i8.trap">;
2076 def int_nvvm_suld_1d_i16_trap
2077   : Intrinsic<[llvm_i16_ty],
2078               [llvm_i64_ty, llvm_i32_ty], [],
2079               "llvm.nvvm.suld.1d.i16.trap">;
2080 def int_nvvm_suld_1d_i32_trap
2081   : Intrinsic<[llvm_i32_ty],
2082               [llvm_i64_ty, llvm_i32_ty], [],
2083               "llvm.nvvm.suld.1d.i32.trap">;
2084 def int_nvvm_suld_1d_i64_trap
2085   : Intrinsic<[llvm_i64_ty],
2086               [llvm_i64_ty, llvm_i32_ty], [],
2087               "llvm.nvvm.suld.1d.i64.trap">;
2088 def int_nvvm_suld_1d_v2i8_trap
2089   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2090               [llvm_i64_ty, llvm_i32_ty], [],
2091               "llvm.nvvm.suld.1d.v2i8.trap">;
2092 def int_nvvm_suld_1d_v2i16_trap
2093   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2094               [llvm_i64_ty, llvm_i32_ty], [],
2095               "llvm.nvvm.suld.1d.v2i16.trap">;
2096 def int_nvvm_suld_1d_v2i32_trap
2097   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2098               [llvm_i64_ty, llvm_i32_ty], [],
2099               "llvm.nvvm.suld.1d.v2i32.trap">;
2100 def int_nvvm_suld_1d_v2i64_trap
2101   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2102               [llvm_i64_ty, llvm_i32_ty], [],
2103               "llvm.nvvm.suld.1d.v2i64.trap">;
2104 def int_nvvm_suld_1d_v4i8_trap
2105   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2106               [llvm_i64_ty, llvm_i32_ty], [],
2107               "llvm.nvvm.suld.1d.v4i8.trap">;
2108 def int_nvvm_suld_1d_v4i16_trap
2109   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2110               [llvm_i64_ty, llvm_i32_ty], [],
2111               "llvm.nvvm.suld.1d.v4i16.trap">;
2112 def int_nvvm_suld_1d_v4i32_trap
2113   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2114               [llvm_i64_ty, llvm_i32_ty], [],
2115               "llvm.nvvm.suld.1d.v4i32.trap">;
2116
2117 def int_nvvm_suld_1d_array_i8_trap
2118   : Intrinsic<[llvm_i16_ty],
2119               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2120               "llvm.nvvm.suld.1d.array.i8.trap">;
2121 def int_nvvm_suld_1d_array_i16_trap
2122   : Intrinsic<[llvm_i16_ty],
2123               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2124               "llvm.nvvm.suld.1d.array.i16.trap">;
2125 def int_nvvm_suld_1d_array_i32_trap
2126   : Intrinsic<[llvm_i32_ty],
2127               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2128               "llvm.nvvm.suld.1d.array.i32.trap">;
2129 def int_nvvm_suld_1d_array_i64_trap
2130   : Intrinsic<[llvm_i64_ty],
2131               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2132               "llvm.nvvm.suld.1d.array.i64.trap">;
2133 def int_nvvm_suld_1d_array_v2i8_trap
2134   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2135               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2136               "llvm.nvvm.suld.1d.array.v2i8.trap">;
2137 def int_nvvm_suld_1d_array_v2i16_trap
2138   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2139               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2140               "llvm.nvvm.suld.1d.array.v2i16.trap">;
2141 def int_nvvm_suld_1d_array_v2i32_trap
2142   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2143               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2144               "llvm.nvvm.suld.1d.array.v2i32.trap">;
2145 def int_nvvm_suld_1d_array_v2i64_trap
2146   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2147               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2148               "llvm.nvvm.suld.1d.array.v2i64.trap">;
2149 def int_nvvm_suld_1d_array_v4i8_trap
2150   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2151               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2152               "llvm.nvvm.suld.1d.array.v4i8.trap">;
2153 def int_nvvm_suld_1d_array_v4i16_trap
2154   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2155               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2156               "llvm.nvvm.suld.1d.array.v4i16.trap">;
2157 def int_nvvm_suld_1d_array_v4i32_trap
2158   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2159               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2160               "llvm.nvvm.suld.1d.array.v4i32.trap">;
2161
2162 def int_nvvm_suld_2d_i8_trap
2163   : Intrinsic<[llvm_i16_ty],
2164               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2165               "llvm.nvvm.suld.2d.i8.trap">;
2166 def int_nvvm_suld_2d_i16_trap
2167   : Intrinsic<[llvm_i16_ty],
2168               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2169               "llvm.nvvm.suld.2d.i16.trap">;
2170 def int_nvvm_suld_2d_i32_trap
2171   : Intrinsic<[llvm_i32_ty],
2172               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2173               "llvm.nvvm.suld.2d.i32.trap">;
2174 def int_nvvm_suld_2d_i64_trap
2175   : Intrinsic<[llvm_i64_ty],
2176               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2177               "llvm.nvvm.suld.2d.i64.trap">;
2178 def int_nvvm_suld_2d_v2i8_trap
2179   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2180               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2181               "llvm.nvvm.suld.2d.v2i8.trap">;
2182 def int_nvvm_suld_2d_v2i16_trap
2183   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2184               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2185               "llvm.nvvm.suld.2d.v2i16.trap">;
2186 def int_nvvm_suld_2d_v2i32_trap
2187   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2188               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2189               "llvm.nvvm.suld.2d.v2i32.trap">;
2190 def int_nvvm_suld_2d_v2i64_trap
2191   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2192               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2193               "llvm.nvvm.suld.2d.v2i64.trap">;
2194 def int_nvvm_suld_2d_v4i8_trap
2195   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2196               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2197               "llvm.nvvm.suld.2d.v4i8.trap">;
2198 def int_nvvm_suld_2d_v4i16_trap
2199   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2200               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2201               "llvm.nvvm.suld.2d.v4i16.trap">;
2202 def int_nvvm_suld_2d_v4i32_trap
2203   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2204               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2205               "llvm.nvvm.suld.2d.v4i32.trap">;
2206
2207 def int_nvvm_suld_2d_array_i8_trap
2208   : Intrinsic<[llvm_i16_ty],
2209               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2210               "llvm.nvvm.suld.2d.array.i8.trap">;
2211 def int_nvvm_suld_2d_array_i16_trap
2212   : Intrinsic<[llvm_i16_ty],
2213               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2214               "llvm.nvvm.suld.2d.array.i16.trap">;
2215 def int_nvvm_suld_2d_array_i32_trap
2216   : Intrinsic<[llvm_i32_ty],
2217               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2218               "llvm.nvvm.suld.2d.array.i32.trap">;
2219 def int_nvvm_suld_2d_array_i64_trap
2220   : Intrinsic<[llvm_i64_ty],
2221               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2222               "llvm.nvvm.suld.2d.array.i64.trap">;
2223 def int_nvvm_suld_2d_array_v2i8_trap
2224   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2225               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2226               "llvm.nvvm.suld.2d.array.v2i8.trap">;
2227 def int_nvvm_suld_2d_array_v2i16_trap
2228   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2229               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2230               "llvm.nvvm.suld.2d.array.v2i16.trap">;
2231 def int_nvvm_suld_2d_array_v2i32_trap
2232   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2233               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2234               "llvm.nvvm.suld.2d.array.v2i32.trap">;
2235 def int_nvvm_suld_2d_array_v2i64_trap
2236   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2237               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2238               "llvm.nvvm.suld.2d.array.v2i64.trap">;
2239 def int_nvvm_suld_2d_array_v4i8_trap
2240   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2241               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2242               "llvm.nvvm.suld.2d.array.v4i8.trap">;
2243 def int_nvvm_suld_2d_array_v4i16_trap
2244   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2245               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2246               "llvm.nvvm.suld.2d.array.v4i16.trap">;
2247 def int_nvvm_suld_2d_array_v4i32_trap
2248   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2249               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2250               "llvm.nvvm.suld.2d.array.v4i32.trap">;
2251
2252 def int_nvvm_suld_3d_i8_trap
2253   : Intrinsic<[llvm_i16_ty],
2254               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2255               "llvm.nvvm.suld.3d.i8.trap">;
2256 def int_nvvm_suld_3d_i16_trap
2257   : Intrinsic<[llvm_i16_ty],
2258               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2259               "llvm.nvvm.suld.3d.i16.trap">;
2260 def int_nvvm_suld_3d_i32_trap
2261   : Intrinsic<[llvm_i32_ty],
2262               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2263               "llvm.nvvm.suld.3d.i32.trap">;
2264 def int_nvvm_suld_3d_i64_trap
2265   : Intrinsic<[llvm_i64_ty],
2266               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2267               "llvm.nvvm.suld.3d.i64.trap">;
2268 def int_nvvm_suld_3d_v2i8_trap
2269   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2270               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2271               "llvm.nvvm.suld.3d.v2i8.trap">;
2272 def int_nvvm_suld_3d_v2i16_trap
2273   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2274               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2275               "llvm.nvvm.suld.3d.v2i16.trap">;
2276 def int_nvvm_suld_3d_v2i32_trap
2277   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2278               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2279               "llvm.nvvm.suld.3d.v2i32.trap">;
2280 def int_nvvm_suld_3d_v2i64_trap
2281   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2282               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2283               "llvm.nvvm.suld.3d.v2i64.trap">;
2284 def int_nvvm_suld_3d_v4i8_trap
2285   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2286               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2287               "llvm.nvvm.suld.3d.v4i8.trap">;
2288 def int_nvvm_suld_3d_v4i16_trap
2289   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2290               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2291               "llvm.nvvm.suld.3d.v4i16.trap">;
2292 def int_nvvm_suld_3d_v4i32_trap
2293   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2294               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2295               "llvm.nvvm.suld.3d.v4i32.trap">;
2296
2297 // .zero variants
2298 def int_nvvm_suld_1d_i8_zero
2299   : Intrinsic<[llvm_i16_ty],
2300               [llvm_i64_ty, llvm_i32_ty], [],
2301               "llvm.nvvm.suld.1d.i8.zero">;
2302 def int_nvvm_suld_1d_i16_zero
2303   : Intrinsic<[llvm_i16_ty],
2304               [llvm_i64_ty, llvm_i32_ty], [],
2305               "llvm.nvvm.suld.1d.i16.zero">;
2306 def int_nvvm_suld_1d_i32_zero
2307   : Intrinsic<[llvm_i32_ty],
2308               [llvm_i64_ty, llvm_i32_ty], [],
2309               "llvm.nvvm.suld.1d.i32.zero">;
2310 def int_nvvm_suld_1d_i64_zero
2311   : Intrinsic<[llvm_i64_ty],
2312               [llvm_i64_ty, llvm_i32_ty], [],
2313               "llvm.nvvm.suld.1d.i64.zero">;
2314 def int_nvvm_suld_1d_v2i8_zero
2315   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2316               [llvm_i64_ty, llvm_i32_ty], [],
2317               "llvm.nvvm.suld.1d.v2i8.zero">;
2318 def int_nvvm_suld_1d_v2i16_zero
2319   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2320               [llvm_i64_ty, llvm_i32_ty], [],
2321               "llvm.nvvm.suld.1d.v2i16.zero">;
2322 def int_nvvm_suld_1d_v2i32_zero
2323   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2324               [llvm_i64_ty, llvm_i32_ty], [],
2325               "llvm.nvvm.suld.1d.v2i32.zero">;
2326 def int_nvvm_suld_1d_v2i64_zero
2327   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2328               [llvm_i64_ty, llvm_i32_ty], [],
2329               "llvm.nvvm.suld.1d.v2i64.zero">;
2330 def int_nvvm_suld_1d_v4i8_zero
2331   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2332               [llvm_i64_ty, llvm_i32_ty], [],
2333               "llvm.nvvm.suld.1d.v4i8.zero">;
2334 def int_nvvm_suld_1d_v4i16_zero
2335   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2336               [llvm_i64_ty, llvm_i32_ty], [],
2337               "llvm.nvvm.suld.1d.v4i16.zero">;
2338 def int_nvvm_suld_1d_v4i32_zero
2339   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2340               [llvm_i64_ty, llvm_i32_ty], [],
2341               "llvm.nvvm.suld.1d.v4i32.zero">;
2342
2343 def int_nvvm_suld_1d_array_i8_zero
2344   : Intrinsic<[llvm_i16_ty],
2345               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2346               "llvm.nvvm.suld.1d.array.i8.zero">;
2347 def int_nvvm_suld_1d_array_i16_zero
2348   : Intrinsic<[llvm_i16_ty],
2349               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2350               "llvm.nvvm.suld.1d.array.i16.zero">;
2351 def int_nvvm_suld_1d_array_i32_zero
2352   : Intrinsic<[llvm_i32_ty],
2353               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2354               "llvm.nvvm.suld.1d.array.i32.zero">;
2355 def int_nvvm_suld_1d_array_i64_zero
2356   : Intrinsic<[llvm_i64_ty],
2357               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2358               "llvm.nvvm.suld.1d.array.i64.zero">;
2359 def int_nvvm_suld_1d_array_v2i8_zero
2360   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2361               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2362               "llvm.nvvm.suld.1d.array.v2i8.zero">;
2363 def int_nvvm_suld_1d_array_v2i16_zero
2364   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2365               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2366               "llvm.nvvm.suld.1d.array.v2i16.zero">;
2367 def int_nvvm_suld_1d_array_v2i32_zero
2368   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2369               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2370               "llvm.nvvm.suld.1d.array.v2i32.zero">;
2371 def int_nvvm_suld_1d_array_v2i64_zero
2372   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2373               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2374               "llvm.nvvm.suld.1d.array.v2i64.zero">;
2375 def int_nvvm_suld_1d_array_v4i8_zero
2376   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2377               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2378               "llvm.nvvm.suld.1d.array.v4i8.zero">;
2379 def int_nvvm_suld_1d_array_v4i16_zero
2380   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2381               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2382               "llvm.nvvm.suld.1d.array.v4i16.zero">;
2383 def int_nvvm_suld_1d_array_v4i32_zero
2384   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2385               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2386               "llvm.nvvm.suld.1d.array.v4i32.zero">;
2387
2388 def int_nvvm_suld_2d_i8_zero
2389   : Intrinsic<[llvm_i16_ty],
2390               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2391               "llvm.nvvm.suld.2d.i8.zero">;
2392 def int_nvvm_suld_2d_i16_zero
2393   : Intrinsic<[llvm_i16_ty],
2394               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2395               "llvm.nvvm.suld.2d.i16.zero">;
2396 def int_nvvm_suld_2d_i32_zero
2397   : Intrinsic<[llvm_i32_ty],
2398               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2399               "llvm.nvvm.suld.2d.i32.zero">;
2400 def int_nvvm_suld_2d_i64_zero
2401   : Intrinsic<[llvm_i64_ty],
2402               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2403               "llvm.nvvm.suld.2d.i64.zero">;
2404 def int_nvvm_suld_2d_v2i8_zero
2405   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2406               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2407               "llvm.nvvm.suld.2d.v2i8.zero">;
2408 def int_nvvm_suld_2d_v2i16_zero
2409   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2410               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2411               "llvm.nvvm.suld.2d.v2i16.zero">;
2412 def int_nvvm_suld_2d_v2i32_zero
2413   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2414               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2415               "llvm.nvvm.suld.2d.v2i32.zero">;
2416 def int_nvvm_suld_2d_v2i64_zero
2417   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2418               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2419               "llvm.nvvm.suld.2d.v2i64.zero">;
2420 def int_nvvm_suld_2d_v4i8_zero
2421   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2422               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2423               "llvm.nvvm.suld.2d.v4i8.zero">;
2424 def int_nvvm_suld_2d_v4i16_zero
2425   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2426               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2427               "llvm.nvvm.suld.2d.v4i16.zero">;
2428 def int_nvvm_suld_2d_v4i32_zero
2429   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2430               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2431               "llvm.nvvm.suld.2d.v4i32.zero">;
2432
2433 def int_nvvm_suld_2d_array_i8_zero
2434   : Intrinsic<[llvm_i16_ty],
2435               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2436               "llvm.nvvm.suld.2d.array.i8.zero">;
2437 def int_nvvm_suld_2d_array_i16_zero
2438   : Intrinsic<[llvm_i16_ty],
2439               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2440               "llvm.nvvm.suld.2d.array.i16.zero">;
2441 def int_nvvm_suld_2d_array_i32_zero
2442   : Intrinsic<[llvm_i32_ty],
2443               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2444               "llvm.nvvm.suld.2d.array.i32.zero">;
2445 def int_nvvm_suld_2d_array_i64_zero
2446   : Intrinsic<[llvm_i64_ty],
2447               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2448               "llvm.nvvm.suld.2d.array.i64.zero">;
2449 def int_nvvm_suld_2d_array_v2i8_zero
2450   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2451               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2452               "llvm.nvvm.suld.2d.array.v2i8.zero">;
2453 def int_nvvm_suld_2d_array_v2i16_zero
2454   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2455               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2456               "llvm.nvvm.suld.2d.array.v2i16.zero">;
2457 def int_nvvm_suld_2d_array_v2i32_zero
2458   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2459               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2460               "llvm.nvvm.suld.2d.array.v2i32.zero">;
2461 def int_nvvm_suld_2d_array_v2i64_zero
2462   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2463               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2464               "llvm.nvvm.suld.2d.array.v2i64.zero">;
2465 def int_nvvm_suld_2d_array_v4i8_zero
2466   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2467               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2468               "llvm.nvvm.suld.2d.array.v4i8.zero">;
2469 def int_nvvm_suld_2d_array_v4i16_zero
2470   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2471               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2472               "llvm.nvvm.suld.2d.array.v4i16.zero">;
2473 def int_nvvm_suld_2d_array_v4i32_zero
2474   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2475               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2476               "llvm.nvvm.suld.2d.array.v4i32.zero">;
2477
2478 def int_nvvm_suld_3d_i8_zero
2479   : Intrinsic<[llvm_i16_ty],
2480               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2481               "llvm.nvvm.suld.3d.i8.zero">;
2482 def int_nvvm_suld_3d_i16_zero
2483   : Intrinsic<[llvm_i16_ty],
2484               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2485               "llvm.nvvm.suld.3d.i16.zero">;
2486 def int_nvvm_suld_3d_i32_zero
2487   : Intrinsic<[llvm_i32_ty],
2488               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2489               "llvm.nvvm.suld.3d.i32.zero">;
2490 def int_nvvm_suld_3d_i64_zero
2491   : Intrinsic<[llvm_i64_ty],
2492               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2493               "llvm.nvvm.suld.3d.i64.zero">;
2494 def int_nvvm_suld_3d_v2i8_zero
2495   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2496               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2497               "llvm.nvvm.suld.3d.v2i8.zero">;
2498 def int_nvvm_suld_3d_v2i16_zero
2499   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2500               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2501               "llvm.nvvm.suld.3d.v2i16.zero">;
2502 def int_nvvm_suld_3d_v2i32_zero
2503   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2504               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2505               "llvm.nvvm.suld.3d.v2i32.zero">;
2506 def int_nvvm_suld_3d_v2i64_zero
2507   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2508               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2509               "llvm.nvvm.suld.3d.v2i64.zero">;
2510 def int_nvvm_suld_3d_v4i8_zero
2511   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2512               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2513               "llvm.nvvm.suld.3d.v4i8.zero">;
2514 def int_nvvm_suld_3d_v4i16_zero
2515   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2516               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2517               "llvm.nvvm.suld.3d.v4i16.zero">;
2518 def int_nvvm_suld_3d_v4i32_zero
2519   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2520               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2521               "llvm.nvvm.suld.3d.v4i32.zero">;
2522
2523 //===- Texture Query ------------------------------------------------------===//
2524
2525 def int_nvvm_txq_channel_order
2526   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2527               "llvm.nvvm.txq.channel.order">,
2528     GCCBuiltin<"__nvvm_txq_channel_order">;
2529 def int_nvvm_txq_channel_data_type
2530   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2531               "llvm.nvvm.txq.channel.data.type">,
2532     GCCBuiltin<"__nvvm_txq_channel_data_type">;
2533 def int_nvvm_txq_width
2534   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2535               "llvm.nvvm.txq.width">,
2536     GCCBuiltin<"__nvvm_txq_width">;
2537 def int_nvvm_txq_height
2538   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2539               "llvm.nvvm.txq.height">,
2540     GCCBuiltin<"__nvvm_txq_height">;
2541 def int_nvvm_txq_depth
2542   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2543               "llvm.nvvm.txq.depth">,
2544     GCCBuiltin<"__nvvm_txq_depth">;
2545 def int_nvvm_txq_array_size
2546   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2547               "llvm.nvvm.txq.array.size">,
2548     GCCBuiltin<"__nvvm_txq_array_size">;
2549 def int_nvvm_txq_num_samples
2550   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2551               "llvm.nvvm.txq.num.samples">,
2552     GCCBuiltin<"__nvvm_txq_num_samples">;
2553 def int_nvvm_txq_num_mipmap_levels
2554   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2555               "llvm.nvvm.txq.num.mipmap.levels">,
2556     GCCBuiltin<"__nvvm_txq_num_mipmap_levels">;
2557
2558 //===- Surface Query ------------------------------------------------------===//
2559
2560 def int_nvvm_suq_channel_order
2561   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2562               "llvm.nvvm.suq.channel.order">,
2563     GCCBuiltin<"__nvvm_suq_channel_order">;
2564 def int_nvvm_suq_channel_data_type
2565   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2566               "llvm.nvvm.suq.channel.data.type">,
2567     GCCBuiltin<"__nvvm_suq_channel_data_type">;
2568 def int_nvvm_suq_width
2569   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2570               "llvm.nvvm.suq.width">,
2571     GCCBuiltin<"__nvvm_suq_width">;
2572 def int_nvvm_suq_height
2573   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2574               "llvm.nvvm.suq.height">,
2575     GCCBuiltin<"__nvvm_suq_height">;
2576 def int_nvvm_suq_depth
2577   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2578               "llvm.nvvm.suq.depth">,
2579     GCCBuiltin<"__nvvm_suq_depth">;
2580 def int_nvvm_suq_array_size
2581   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2582               "llvm.nvvm.suq.array.size">,
2583     GCCBuiltin<"__nvvm_suq_array_size">;
2584
2585
2586 //===- Handle Query -------------------------------------------------------===//
2587
2588 def int_nvvm_istypep_sampler
2589   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2590               "llvm.nvvm.istypep.sampler">,
2591     GCCBuiltin<"__nvvm_istypep_sampler">;
2592 def int_nvvm_istypep_surface
2593   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2594               "llvm.nvvm.istypep.surface">,
2595     GCCBuiltin<"__nvvm_istypep_surface">;
2596 def int_nvvm_istypep_texture
2597   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2598               "llvm.nvvm.istypep.texture">,
2599     GCCBuiltin<"__nvvm_istypep_texture">;
2600
2601
2602
2603 //===- Surface Stores -----------------------------------------------------===//
2604
2605 // Unformatted
2606 // .clamp variant
2607 def int_nvvm_sust_b_1d_i8_clamp
2608   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2609               "llvm.nvvm.sust.b.1d.i8.clamp">,
2610     GCCBuiltin<"__nvvm_sust_b_1d_i8_clamp">;
2611 def int_nvvm_sust_b_1d_i16_clamp
2612   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2613               "llvm.nvvm.sust.b.1d.i16.clamp">,
2614     GCCBuiltin<"__nvvm_sust_b_1d_i16_clamp">;
2615 def int_nvvm_sust_b_1d_i32_clamp
2616   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2617               "llvm.nvvm.sust.b.1d.i32.clamp">,
2618     GCCBuiltin<"__nvvm_sust_b_1d_i32_clamp">;
2619 def int_nvvm_sust_b_1d_i64_clamp
2620   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
2621               "llvm.nvvm.sust.b.1d.i64.clamp">,
2622     GCCBuiltin<"__nvvm_sust_b_1d_i64_clamp">;
2623 def int_nvvm_sust_b_1d_v2i8_clamp
2624   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2625               "llvm.nvvm.sust.b.1d.v2i8.clamp">,
2626     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_clamp">;
2627 def int_nvvm_sust_b_1d_v2i16_clamp
2628   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2629               "llvm.nvvm.sust.b.1d.v2i16.clamp">,
2630     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_clamp">;
2631 def int_nvvm_sust_b_1d_v2i32_clamp
2632   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2633               "llvm.nvvm.sust.b.1d.v2i32.clamp">,
2634     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_clamp">;
2635 def int_nvvm_sust_b_1d_v2i64_clamp
2636   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
2637               "llvm.nvvm.sust.b.1d.v2i64.clamp">,
2638     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_clamp">;
2639 def int_nvvm_sust_b_1d_v4i8_clamp
2640   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2641                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2642               "llvm.nvvm.sust.b.1d.v4i8.clamp">,
2643     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_clamp">;
2644 def int_nvvm_sust_b_1d_v4i16_clamp
2645   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2646                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2647               "llvm.nvvm.sust.b.1d.v4i16.clamp">,
2648     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_clamp">;
2649 def int_nvvm_sust_b_1d_v4i32_clamp
2650   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2651                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2652               "llvm.nvvm.sust.b.1d.v4i32.clamp">,
2653     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_clamp">;
2654
2655
2656 def int_nvvm_sust_b_1d_array_i8_clamp
2657   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2658               "llvm.nvvm.sust.b.1d.array.i8.clamp">,
2659     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_clamp">;
2660 def int_nvvm_sust_b_1d_array_i16_clamp
2661   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2662               "llvm.nvvm.sust.b.1d.array.i16.clamp">,
2663     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_clamp">;
2664 def int_nvvm_sust_b_1d_array_i32_clamp
2665   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2666               "llvm.nvvm.sust.b.1d.array.i32.clamp">,
2667     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_clamp">;
2668 def int_nvvm_sust_b_1d_array_i64_clamp
2669   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2670               "llvm.nvvm.sust.b.1d.array.i64.clamp">,
2671     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_clamp">;
2672 def int_nvvm_sust_b_1d_array_v2i8_clamp
2673   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2674                    llvm_i16_ty, llvm_i16_ty], [],
2675               "llvm.nvvm.sust.b.1d.array.v2i8.clamp">,
2676     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_clamp">;
2677 def int_nvvm_sust_b_1d_array_v2i16_clamp
2678   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2679                    llvm_i16_ty, llvm_i16_ty], [],
2680               "llvm.nvvm.sust.b.1d.array.v2i16.clamp">,
2681     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_clamp">;
2682 def int_nvvm_sust_b_1d_array_v2i32_clamp
2683   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2684                    llvm_i32_ty, llvm_i32_ty], [],
2685               "llvm.nvvm.sust.b.1d.array.v2i32.clamp">,
2686     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_clamp">;
2687 def int_nvvm_sust_b_1d_array_v2i64_clamp
2688   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2689                    llvm_i64_ty, llvm_i64_ty], [],
2690               "llvm.nvvm.sust.b.1d.array.v2i64.clamp">,
2691     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_clamp">;
2692 def int_nvvm_sust_b_1d_array_v4i8_clamp
2693   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2694                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2695               "llvm.nvvm.sust.b.1d.array.v4i8.clamp">,
2696     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_clamp">;
2697 def int_nvvm_sust_b_1d_array_v4i16_clamp
2698   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2699                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2700               "llvm.nvvm.sust.b.1d.array.v4i16.clamp">,
2701     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_clamp">;
2702 def int_nvvm_sust_b_1d_array_v4i32_clamp
2703   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2704                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2705               "llvm.nvvm.sust.b.1d.array.v4i32.clamp">,
2706     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_clamp">;
2707
2708
2709 def int_nvvm_sust_b_2d_i8_clamp
2710   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2711               "llvm.nvvm.sust.b.2d.i8.clamp">,
2712     GCCBuiltin<"__nvvm_sust_b_2d_i8_clamp">;
2713 def int_nvvm_sust_b_2d_i16_clamp
2714   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2715               "llvm.nvvm.sust.b.2d.i16.clamp">,
2716     GCCBuiltin<"__nvvm_sust_b_2d_i16_clamp">;
2717 def int_nvvm_sust_b_2d_i32_clamp
2718   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2719               "llvm.nvvm.sust.b.2d.i32.clamp">,
2720     GCCBuiltin<"__nvvm_sust_b_2d_i32_clamp">;
2721 def int_nvvm_sust_b_2d_i64_clamp
2722   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2723               "llvm.nvvm.sust.b.2d.i64.clamp">,
2724     GCCBuiltin<"__nvvm_sust_b_2d_i64_clamp">;
2725 def int_nvvm_sust_b_2d_v2i8_clamp
2726   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2727                    llvm_i16_ty, llvm_i16_ty], [],
2728               "llvm.nvvm.sust.b.2d.v2i8.clamp">,
2729     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_clamp">;
2730 def int_nvvm_sust_b_2d_v2i16_clamp
2731   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2732                    llvm_i16_ty, llvm_i16_ty], [],
2733               "llvm.nvvm.sust.b.2d.v2i16.clamp">,
2734     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_clamp">;
2735 def int_nvvm_sust_b_2d_v2i32_clamp
2736   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2737                    llvm_i32_ty, llvm_i32_ty], [],
2738               "llvm.nvvm.sust.b.2d.v2i32.clamp">,
2739     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_clamp">;
2740 def int_nvvm_sust_b_2d_v2i64_clamp
2741   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2742                    llvm_i64_ty, llvm_i64_ty], [],
2743               "llvm.nvvm.sust.b.2d.v2i64.clamp">,
2744     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_clamp">;
2745 def int_nvvm_sust_b_2d_v4i8_clamp
2746   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2747                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2748               "llvm.nvvm.sust.b.2d.v4i8.clamp">,
2749     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_clamp">;
2750 def int_nvvm_sust_b_2d_v4i16_clamp
2751   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2752                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2753               "llvm.nvvm.sust.b.2d.v4i16.clamp">,
2754     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_clamp">;
2755 def int_nvvm_sust_b_2d_v4i32_clamp
2756   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2757                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2758               "llvm.nvvm.sust.b.2d.v4i32.clamp">,
2759     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_clamp">;
2760
2761
2762 def int_nvvm_sust_b_2d_array_i8_clamp
2763   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2764                    llvm_i32_ty, llvm_i16_ty], [],
2765               "llvm.nvvm.sust.b.2d.array.i8.clamp">,
2766     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_clamp">;
2767 def int_nvvm_sust_b_2d_array_i16_clamp
2768   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2769                    llvm_i32_ty, llvm_i16_ty], [],
2770               "llvm.nvvm.sust.b.2d.array.i16.clamp">,
2771     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_clamp">;
2772 def int_nvvm_sust_b_2d_array_i32_clamp
2773   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2774                    llvm_i32_ty, llvm_i32_ty], [],
2775               "llvm.nvvm.sust.b.2d.array.i32.clamp">,
2776     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_clamp">;
2777 def int_nvvm_sust_b_2d_array_i64_clamp
2778   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2779                    llvm_i32_ty, llvm_i64_ty], [],
2780               "llvm.nvvm.sust.b.2d.array.i64.clamp">,
2781     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_clamp">;
2782 def int_nvvm_sust_b_2d_array_v2i8_clamp
2783   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2784                    llvm_i16_ty, llvm_i16_ty], [],
2785               "llvm.nvvm.sust.b.2d.array.v2i8.clamp">,
2786     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_clamp">;
2787 def int_nvvm_sust_b_2d_array_v2i16_clamp
2788   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2789                    llvm_i16_ty, llvm_i16_ty], [],
2790               "llvm.nvvm.sust.b.2d.array.v2i16.clamp">,
2791     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_clamp">;
2792 def int_nvvm_sust_b_2d_array_v2i32_clamp
2793   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2794                    llvm_i32_ty, llvm_i32_ty], [],
2795               "llvm.nvvm.sust.b.2d.array.v2i32.clamp">,
2796     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_clamp">;
2797 def int_nvvm_sust_b_2d_array_v2i64_clamp
2798   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2799                    llvm_i64_ty, llvm_i64_ty], [],
2800               "llvm.nvvm.sust.b.2d.array.v2i64.clamp">,
2801     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_clamp">;
2802 def int_nvvm_sust_b_2d_array_v4i8_clamp
2803   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2804                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2805               "llvm.nvvm.sust.b.2d.array.v4i8.clamp">,
2806     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_clamp">;
2807 def int_nvvm_sust_b_2d_array_v4i16_clamp
2808   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2809                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2810               "llvm.nvvm.sust.b.2d.array.v4i16.clamp">,
2811     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_clamp">;
2812 def int_nvvm_sust_b_2d_array_v4i32_clamp
2813   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2814                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2815               "llvm.nvvm.sust.b.2d.array.v4i32.clamp">,
2816     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_clamp">;
2817
2818
2819 def int_nvvm_sust_b_3d_i8_clamp
2820   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2821                    llvm_i32_ty, llvm_i16_ty], [],
2822               "llvm.nvvm.sust.b.3d.i8.clamp">,
2823     GCCBuiltin<"__nvvm_sust_b_3d_i8_clamp">;
2824 def int_nvvm_sust_b_3d_i16_clamp
2825   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2826                    llvm_i32_ty, llvm_i16_ty], [],
2827               "llvm.nvvm.sust.b.3d.i16.clamp">,
2828     GCCBuiltin<"__nvvm_sust_b_3d_i16_clamp">;
2829 def int_nvvm_sust_b_3d_i32_clamp
2830   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2831                    llvm_i32_ty, llvm_i32_ty], [],
2832               "llvm.nvvm.sust.b.3d.i32.clamp">,
2833     GCCBuiltin<"__nvvm_sust_b_3d_i32_clamp">;
2834 def int_nvvm_sust_b_3d_i64_clamp
2835   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2836                    llvm_i32_ty, llvm_i64_ty], [],
2837               "llvm.nvvm.sust.b.3d.i64.clamp">,
2838     GCCBuiltin<"__nvvm_sust_b_3d_i64_clamp">;
2839 def int_nvvm_sust_b_3d_v2i8_clamp
2840   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2841                    llvm_i16_ty, llvm_i16_ty], [],
2842               "llvm.nvvm.sust.b.3d.v2i8.clamp">,
2843     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_clamp">;
2844 def int_nvvm_sust_b_3d_v2i16_clamp
2845   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2846                    llvm_i16_ty, llvm_i16_ty], [],
2847               "llvm.nvvm.sust.b.3d.v2i16.clamp">,
2848     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_clamp">;
2849 def int_nvvm_sust_b_3d_v2i32_clamp
2850   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2851                    llvm_i32_ty, llvm_i32_ty], [],
2852               "llvm.nvvm.sust.b.3d.v2i32.clamp">,
2853     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_clamp">;
2854 def int_nvvm_sust_b_3d_v2i64_clamp
2855   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2856                    llvm_i64_ty, llvm_i64_ty], [],
2857               "llvm.nvvm.sust.b.3d.v2i64.clamp">,
2858     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_clamp">;
2859 def int_nvvm_sust_b_3d_v4i8_clamp
2860   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2861                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2862               "llvm.nvvm.sust.b.3d.v4i8.clamp">,
2863     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_clamp">;
2864 def int_nvvm_sust_b_3d_v4i16_clamp
2865   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2866                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2867               "llvm.nvvm.sust.b.3d.v4i16.clamp">,
2868     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_clamp">;
2869 def int_nvvm_sust_b_3d_v4i32_clamp
2870   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2871                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2872               "llvm.nvvm.sust.b.3d.v4i32.clamp">,
2873     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_clamp">;
2874
2875
2876 // .trap variant
2877 def int_nvvm_sust_b_1d_i8_trap
2878   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2879               "llvm.nvvm.sust.b.1d.i8.trap">,
2880     GCCBuiltin<"__nvvm_sust_b_1d_i8_trap">;
2881 def int_nvvm_sust_b_1d_i16_trap
2882   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2883               "llvm.nvvm.sust.b.1d.i16.trap">,
2884     GCCBuiltin<"__nvvm_sust_b_1d_i16_trap">;
2885 def int_nvvm_sust_b_1d_i32_trap
2886   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2887               "llvm.nvvm.sust.b.1d.i32.trap">,
2888     GCCBuiltin<"__nvvm_sust_b_1d_i32_trap">;
2889 def int_nvvm_sust_b_1d_i64_trap
2890   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
2891               "llvm.nvvm.sust.b.1d.i64.trap">,
2892     GCCBuiltin<"__nvvm_sust_b_1d_i64_trap">;
2893 def int_nvvm_sust_b_1d_v2i8_trap
2894   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2895               "llvm.nvvm.sust.b.1d.v2i8.trap">,
2896     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
2897 def int_nvvm_sust_b_1d_v2i16_trap
2898   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2899               "llvm.nvvm.sust.b.1d.v2i16.trap">,
2900     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
2901 def int_nvvm_sust_b_1d_v2i32_trap
2902   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2903               "llvm.nvvm.sust.b.1d.v2i32.trap">,
2904     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
2905 def int_nvvm_sust_b_1d_v2i64_trap
2906   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
2907               "llvm.nvvm.sust.b.1d.v2i64.trap">,
2908     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_trap">;
2909 def int_nvvm_sust_b_1d_v4i8_trap
2910   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2911                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2912               "llvm.nvvm.sust.b.1d.v4i8.trap">,
2913     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
2914 def int_nvvm_sust_b_1d_v4i16_trap
2915   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2916                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2917               "llvm.nvvm.sust.b.1d.v4i16.trap">,
2918     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
2919 def int_nvvm_sust_b_1d_v4i32_trap
2920   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2921                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2922               "llvm.nvvm.sust.b.1d.v4i32.trap">,
2923     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
2924
2925
2926 def int_nvvm_sust_b_1d_array_i8_trap
2927   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2928               "llvm.nvvm.sust.b.1d.array.i8.trap">,
2929     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
2930 def int_nvvm_sust_b_1d_array_i16_trap
2931   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2932               "llvm.nvvm.sust.b.1d.array.i16.trap">,
2933     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
2934 def int_nvvm_sust_b_1d_array_i32_trap
2935   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2936               "llvm.nvvm.sust.b.1d.array.i32.trap">,
2937     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
2938 def int_nvvm_sust_b_1d_array_i64_trap
2939   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2940               "llvm.nvvm.sust.b.1d.array.i64.trap">,
2941     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_trap">;
2942 def int_nvvm_sust_b_1d_array_v2i8_trap
2943   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2944                    llvm_i16_ty, llvm_i16_ty], [],
2945               "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
2946     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
2947 def int_nvvm_sust_b_1d_array_v2i16_trap
2948   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2949                    llvm_i16_ty, llvm_i16_ty], [],
2950               "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
2951     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
2952 def int_nvvm_sust_b_1d_array_v2i32_trap
2953   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2954                    llvm_i32_ty, llvm_i32_ty], [],
2955               "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
2956     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
2957 def int_nvvm_sust_b_1d_array_v2i64_trap
2958   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2959                    llvm_i64_ty, llvm_i64_ty], [],
2960               "llvm.nvvm.sust.b.1d.array.v2i64.trap">,
2961     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_trap">;
2962 def int_nvvm_sust_b_1d_array_v4i8_trap
2963   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2964                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2965               "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
2966     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
2967 def int_nvvm_sust_b_1d_array_v4i16_trap
2968   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2969                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2970               "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
2971     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
2972 def int_nvvm_sust_b_1d_array_v4i32_trap
2973   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2974                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2975               "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
2976     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
2977
2978
2979 def int_nvvm_sust_b_2d_i8_trap
2980   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2981               "llvm.nvvm.sust.b.2d.i8.trap">,
2982     GCCBuiltin<"__nvvm_sust_b_2d_i8_trap">;
2983 def int_nvvm_sust_b_2d_i16_trap
2984   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2985               "llvm.nvvm.sust.b.2d.i16.trap">,
2986     GCCBuiltin<"__nvvm_sust_b_2d_i16_trap">;
2987 def int_nvvm_sust_b_2d_i32_trap
2988   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2989               "llvm.nvvm.sust.b.2d.i32.trap">,
2990     GCCBuiltin<"__nvvm_sust_b_2d_i32_trap">;
2991 def int_nvvm_sust_b_2d_i64_trap
2992   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2993               "llvm.nvvm.sust.b.2d.i64.trap">,
2994     GCCBuiltin<"__nvvm_sust_b_2d_i64_trap">;
2995 def int_nvvm_sust_b_2d_v2i8_trap
2996   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2997                    llvm_i16_ty, llvm_i16_ty], [],
2998               "llvm.nvvm.sust.b.2d.v2i8.trap">,
2999     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
3000 def int_nvvm_sust_b_2d_v2i16_trap
3001   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3002                    llvm_i16_ty, llvm_i16_ty], [],
3003               "llvm.nvvm.sust.b.2d.v2i16.trap">,
3004     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
3005 def int_nvvm_sust_b_2d_v2i32_trap
3006   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3007                    llvm_i32_ty, llvm_i32_ty], [],
3008               "llvm.nvvm.sust.b.2d.v2i32.trap">,
3009     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
3010 def int_nvvm_sust_b_2d_v2i64_trap
3011   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3012                    llvm_i64_ty, llvm_i64_ty], [],
3013               "llvm.nvvm.sust.b.2d.v2i64.trap">,
3014     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_trap">;
3015 def int_nvvm_sust_b_2d_v4i8_trap
3016   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3017                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3018               "llvm.nvvm.sust.b.2d.v4i8.trap">,
3019     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
3020 def int_nvvm_sust_b_2d_v4i16_trap
3021   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3022                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3023               "llvm.nvvm.sust.b.2d.v4i16.trap">,
3024     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
3025 def int_nvvm_sust_b_2d_v4i32_trap
3026   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3027                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3028               "llvm.nvvm.sust.b.2d.v4i32.trap">,
3029     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
3030
3031
3032 def int_nvvm_sust_b_2d_array_i8_trap
3033   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3034                    llvm_i32_ty, llvm_i16_ty], [],
3035               "llvm.nvvm.sust.b.2d.array.i8.trap">,
3036     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
3037 def int_nvvm_sust_b_2d_array_i16_trap
3038   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3039                    llvm_i32_ty, llvm_i16_ty], [],
3040               "llvm.nvvm.sust.b.2d.array.i16.trap">,
3041     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
3042 def int_nvvm_sust_b_2d_array_i32_trap
3043   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3044                    llvm_i32_ty, llvm_i32_ty], [],
3045               "llvm.nvvm.sust.b.2d.array.i32.trap">,
3046     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
3047 def int_nvvm_sust_b_2d_array_i64_trap
3048   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3049                    llvm_i32_ty, llvm_i64_ty], [],
3050               "llvm.nvvm.sust.b.2d.array.i64.trap">,
3051     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_trap">;
3052 def int_nvvm_sust_b_2d_array_v2i8_trap
3053   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3054                    llvm_i16_ty, llvm_i16_ty], [],
3055               "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
3056     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
3057 def int_nvvm_sust_b_2d_array_v2i16_trap
3058   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3059                    llvm_i16_ty, llvm_i16_ty], [],
3060               "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
3061     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
3062 def int_nvvm_sust_b_2d_array_v2i32_trap
3063   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3064                    llvm_i32_ty, llvm_i32_ty], [],
3065               "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
3066     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
3067 def int_nvvm_sust_b_2d_array_v2i64_trap
3068   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3069                    llvm_i64_ty, llvm_i64_ty], [],
3070               "llvm.nvvm.sust.b.2d.array.v2i64.trap">,
3071     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_trap">;
3072 def int_nvvm_sust_b_2d_array_v4i8_trap
3073   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3074                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3075               "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
3076     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
3077 def int_nvvm_sust_b_2d_array_v4i16_trap
3078   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3079                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3080               "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
3081     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
3082 def int_nvvm_sust_b_2d_array_v4i32_trap
3083   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3084                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3085               "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
3086     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
3087
3088
3089 def int_nvvm_sust_b_3d_i8_trap
3090   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3091                    llvm_i32_ty, llvm_i16_ty], [],
3092               "llvm.nvvm.sust.b.3d.i8.trap">,
3093     GCCBuiltin<"__nvvm_sust_b_3d_i8_trap">;
3094 def int_nvvm_sust_b_3d_i16_trap
3095   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3096                    llvm_i32_ty, llvm_i16_ty], [],
3097               "llvm.nvvm.sust.b.3d.i16.trap">,
3098     GCCBuiltin<"__nvvm_sust_b_3d_i16_trap">;
3099 def int_nvvm_sust_b_3d_i32_trap
3100   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3101                    llvm_i32_ty, llvm_i32_ty], [],
3102               "llvm.nvvm.sust.b.3d.i32.trap">,
3103     GCCBuiltin<"__nvvm_sust_b_3d_i32_trap">;
3104 def int_nvvm_sust_b_3d_i64_trap
3105   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3106                    llvm_i32_ty, llvm_i64_ty], [],
3107               "llvm.nvvm.sust.b.3d.i64.trap">,
3108     GCCBuiltin<"__nvvm_sust_b_3d_i64_trap">;
3109 def int_nvvm_sust_b_3d_v2i8_trap
3110   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3111                    llvm_i16_ty, llvm_i16_ty], [],
3112               "llvm.nvvm.sust.b.3d.v2i8.trap">,
3113     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
3114 def int_nvvm_sust_b_3d_v2i16_trap
3115   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3116                    llvm_i16_ty, llvm_i16_ty], [],
3117               "llvm.nvvm.sust.b.3d.v2i16.trap">,
3118     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
3119 def int_nvvm_sust_b_3d_v2i32_trap
3120   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3121                    llvm_i32_ty, llvm_i32_ty], [],
3122               "llvm.nvvm.sust.b.3d.v2i32.trap">,
3123     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
3124 def int_nvvm_sust_b_3d_v2i64_trap
3125   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3126                    llvm_i64_ty, llvm_i64_ty], [],
3127               "llvm.nvvm.sust.b.3d.v2i64.trap">,
3128     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_trap">;
3129 def int_nvvm_sust_b_3d_v4i8_trap
3130   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3131                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3132               "llvm.nvvm.sust.b.3d.v4i8.trap">,
3133     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
3134 def int_nvvm_sust_b_3d_v4i16_trap
3135   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3136                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3137               "llvm.nvvm.sust.b.3d.v4i16.trap">,
3138     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
3139 def int_nvvm_sust_b_3d_v4i32_trap
3140   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3141                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3142               "llvm.nvvm.sust.b.3d.v4i32.trap">,
3143     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
3144
3145
3146 // .zero variant
3147 def int_nvvm_sust_b_1d_i8_zero
3148   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3149               "llvm.nvvm.sust.b.1d.i8.zero">,
3150     GCCBuiltin<"__nvvm_sust_b_1d_i8_zero">;
3151 def int_nvvm_sust_b_1d_i16_zero
3152   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3153               "llvm.nvvm.sust.b.1d.i16.zero">,
3154     GCCBuiltin<"__nvvm_sust_b_1d_i16_zero">;
3155 def int_nvvm_sust_b_1d_i32_zero
3156   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3157               "llvm.nvvm.sust.b.1d.i32.zero">,
3158     GCCBuiltin<"__nvvm_sust_b_1d_i32_zero">;
3159 def int_nvvm_sust_b_1d_i64_zero
3160   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3161               "llvm.nvvm.sust.b.1d.i64.zero">,
3162     GCCBuiltin<"__nvvm_sust_b_1d_i64_zero">;
3163 def int_nvvm_sust_b_1d_v2i8_zero
3164   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3165               "llvm.nvvm.sust.b.1d.v2i8.zero">,
3166     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_zero">;
3167 def int_nvvm_sust_b_1d_v2i16_zero
3168   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3169               "llvm.nvvm.sust.b.1d.v2i16.zero">,
3170     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_zero">;
3171 def int_nvvm_sust_b_1d_v2i32_zero
3172   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3173               "llvm.nvvm.sust.b.1d.v2i32.zero">,
3174     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_zero">;
3175 def int_nvvm_sust_b_1d_v2i64_zero
3176   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3177               "llvm.nvvm.sust.b.1d.v2i64.zero">,
3178     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_zero">;
3179 def int_nvvm_sust_b_1d_v4i8_zero
3180   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3181                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3182               "llvm.nvvm.sust.b.1d.v4i8.zero">,
3183     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_zero">;
3184 def int_nvvm_sust_b_1d_v4i16_zero
3185   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3186                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3187               "llvm.nvvm.sust.b.1d.v4i16.zero">,
3188     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_zero">;
3189 def int_nvvm_sust_b_1d_v4i32_zero
3190   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3191                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3192               "llvm.nvvm.sust.b.1d.v4i32.zero">,
3193     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_zero">;
3194
3195
3196 def int_nvvm_sust_b_1d_array_i8_zero
3197   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3198               "llvm.nvvm.sust.b.1d.array.i8.zero">,
3199     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_zero">;
3200 def int_nvvm_sust_b_1d_array_i16_zero
3201   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3202               "llvm.nvvm.sust.b.1d.array.i16.zero">,
3203     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_zero">;
3204 def int_nvvm_sust_b_1d_array_i32_zero
3205   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3206               "llvm.nvvm.sust.b.1d.array.i32.zero">,
3207     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_zero">;
3208 def int_nvvm_sust_b_1d_array_i64_zero
3209   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3210               "llvm.nvvm.sust.b.1d.array.i64.zero">,
3211     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_zero">;
3212 def int_nvvm_sust_b_1d_array_v2i8_zero
3213   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3214                    llvm_i16_ty, llvm_i16_ty], [],
3215               "llvm.nvvm.sust.b.1d.array.v2i8.zero">,
3216     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_zero">;
3217 def int_nvvm_sust_b_1d_array_v2i16_zero
3218   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3219                    llvm_i16_ty, llvm_i16_ty], [],
3220               "llvm.nvvm.sust.b.1d.array.v2i16.zero">,
3221     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_zero">;
3222 def int_nvvm_sust_b_1d_array_v2i32_zero
3223   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3224                    llvm_i32_ty, llvm_i32_ty], [],
3225               "llvm.nvvm.sust.b.1d.array.v2i32.zero">,
3226     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_zero">;
3227 def int_nvvm_sust_b_1d_array_v2i64_zero
3228   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3229                    llvm_i64_ty, llvm_i64_ty], [],
3230               "llvm.nvvm.sust.b.1d.array.v2i64.zero">,
3231     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_zero">;
3232 def int_nvvm_sust_b_1d_array_v4i8_zero
3233   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3234                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3235               "llvm.nvvm.sust.b.1d.array.v4i8.zero">,
3236     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_zero">;
3237 def int_nvvm_sust_b_1d_array_v4i16_zero
3238   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3239                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3240               "llvm.nvvm.sust.b.1d.array.v4i16.zero">,
3241     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_zero">;
3242 def int_nvvm_sust_b_1d_array_v4i32_zero
3243   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3244                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3245               "llvm.nvvm.sust.b.1d.array.v4i32.zero">,
3246     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_zero">;
3247
3248
3249 def int_nvvm_sust_b_2d_i8_zero
3250   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3251               "llvm.nvvm.sust.b.2d.i8.zero">,
3252     GCCBuiltin<"__nvvm_sust_b_2d_i8_zero">;
3253 def int_nvvm_sust_b_2d_i16_zero
3254   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3255               "llvm.nvvm.sust.b.2d.i16.zero">,
3256     GCCBuiltin<"__nvvm_sust_b_2d_i16_zero">;
3257 def int_nvvm_sust_b_2d_i32_zero
3258   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3259               "llvm.nvvm.sust.b.2d.i32.zero">,
3260     GCCBuiltin<"__nvvm_sust_b_2d_i32_zero">;
3261 def int_nvvm_sust_b_2d_i64_zero
3262   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3263               "llvm.nvvm.sust.b.2d.i64.zero">,
3264     GCCBuiltin<"__nvvm_sust_b_2d_i64_zero">;
3265 def int_nvvm_sust_b_2d_v2i8_zero
3266   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3267                    llvm_i16_ty, llvm_i16_ty], [],
3268               "llvm.nvvm.sust.b.2d.v2i8.zero">,
3269     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_zero">;
3270 def int_nvvm_sust_b_2d_v2i16_zero
3271   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3272                    llvm_i16_ty, llvm_i16_ty], [],
3273               "llvm.nvvm.sust.b.2d.v2i16.zero">,
3274     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_zero">;
3275 def int_nvvm_sust_b_2d_v2i32_zero
3276   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3277                    llvm_i32_ty, llvm_i32_ty], [],
3278               "llvm.nvvm.sust.b.2d.v2i32.zero">,
3279     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_zero">;
3280 def int_nvvm_sust_b_2d_v2i64_zero
3281   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3282                    llvm_i64_ty, llvm_i64_ty], [],
3283               "llvm.nvvm.sust.b.2d.v2i64.zero">,
3284     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_zero">;
3285 def int_nvvm_sust_b_2d_v4i8_zero
3286   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3287                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3288               "llvm.nvvm.sust.b.2d.v4i8.zero">,
3289     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_zero">;
3290 def int_nvvm_sust_b_2d_v4i16_zero
3291   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3292                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3293               "llvm.nvvm.sust.b.2d.v4i16.zero">,
3294     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_zero">;
3295 def int_nvvm_sust_b_2d_v4i32_zero
3296   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3297                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3298               "llvm.nvvm.sust.b.2d.v4i32.zero">,
3299     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_zero">;
3300
3301
3302 def int_nvvm_sust_b_2d_array_i8_zero
3303   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3304                    llvm_i32_ty, llvm_i16_ty], [],
3305               "llvm.nvvm.sust.b.2d.array.i8.zero">,
3306     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_zero">;
3307 def int_nvvm_sust_b_2d_array_i16_zero
3308   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3309                    llvm_i32_ty, llvm_i16_ty], [],
3310               "llvm.nvvm.sust.b.2d.array.i16.zero">,
3311     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_zero">;
3312 def int_nvvm_sust_b_2d_array_i32_zero
3313   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3314                    llvm_i32_ty, llvm_i32_ty], [],
3315               "llvm.nvvm.sust.b.2d.array.i32.zero">,
3316     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_zero">;
3317 def int_nvvm_sust_b_2d_array_i64_zero
3318   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3319                    llvm_i32_ty, llvm_i64_ty], [],
3320               "llvm.nvvm.sust.b.2d.array.i64.zero">,
3321     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_zero">;
3322 def int_nvvm_sust_b_2d_array_v2i8_zero
3323   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3324                    llvm_i16_ty, llvm_i16_ty], [],
3325               "llvm.nvvm.sust.b.2d.array.v2i8.zero">,
3326     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_zero">;
3327 def int_nvvm_sust_b_2d_array_v2i16_zero
3328   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3329                    llvm_i16_ty, llvm_i16_ty], [],
3330               "llvm.nvvm.sust.b.2d.array.v2i16.zero">,
3331     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_zero">;
3332 def int_nvvm_sust_b_2d_array_v2i32_zero
3333   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3334                    llvm_i32_ty, llvm_i32_ty], [],
3335               "llvm.nvvm.sust.b.2d.array.v2i32.zero">,
3336     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_zero">;
3337 def int_nvvm_sust_b_2d_array_v2i64_zero
3338   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3339                    llvm_i64_ty, llvm_i64_ty], [],
3340               "llvm.nvvm.sust.b.2d.array.v2i64.zero">,
3341     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_zero">;
3342 def int_nvvm_sust_b_2d_array_v4i8_zero
3343   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3344                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3345               "llvm.nvvm.sust.b.2d.array.v4i8.zero">,
3346     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_zero">;
3347 def int_nvvm_sust_b_2d_array_v4i16_zero
3348   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3349                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3350               "llvm.nvvm.sust.b.2d.array.v4i16.zero">,
3351     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_zero">;
3352 def int_nvvm_sust_b_2d_array_v4i32_zero
3353   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3354                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3355               "llvm.nvvm.sust.b.2d.array.v4i32.zero">,
3356     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_zero">;
3357
3358
3359 def int_nvvm_sust_b_3d_i8_zero
3360   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3361                    llvm_i32_ty, llvm_i16_ty], [],
3362               "llvm.nvvm.sust.b.3d.i8.zero">,
3363     GCCBuiltin<"__nvvm_sust_b_3d_i8_zero">;
3364 def int_nvvm_sust_b_3d_i16_zero
3365   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3366                    llvm_i32_ty, llvm_i16_ty], [],
3367               "llvm.nvvm.sust.b.3d.i16.zero">,
3368     GCCBuiltin<"__nvvm_sust_b_3d_i16_zero">;
3369 def int_nvvm_sust_b_3d_i32_zero
3370   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3371                    llvm_i32_ty, llvm_i32_ty], [],
3372               "llvm.nvvm.sust.b.3d.i32.zero">,
3373     GCCBuiltin<"__nvvm_sust_b_3d_i32_zero">;
3374 def int_nvvm_sust_b_3d_i64_zero
3375   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3376                    llvm_i32_ty, llvm_i64_ty], [],
3377               "llvm.nvvm.sust.b.3d.i64.zero">,
3378     GCCBuiltin<"__nvvm_sust_b_3d_i64_zero">;
3379 def int_nvvm_sust_b_3d_v2i8_zero
3380   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3381                    llvm_i16_ty, llvm_i16_ty], [],
3382               "llvm.nvvm.sust.b.3d.v2i8.zero">,
3383     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_zero">;
3384 def int_nvvm_sust_b_3d_v2i16_zero
3385   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3386                    llvm_i16_ty, llvm_i16_ty], [],
3387               "llvm.nvvm.sust.b.3d.v2i16.zero">,
3388     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_zero">;
3389 def int_nvvm_sust_b_3d_v2i32_zero
3390   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3391                    llvm_i32_ty, llvm_i32_ty], [],
3392               "llvm.nvvm.sust.b.3d.v2i32.zero">,
3393     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_zero">;
3394 def int_nvvm_sust_b_3d_v2i64_zero
3395   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3396                    llvm_i64_ty, llvm_i64_ty], [],
3397               "llvm.nvvm.sust.b.3d.v2i64.zero">,
3398     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_zero">;
3399 def int_nvvm_sust_b_3d_v4i8_zero
3400   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3401                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3402               "llvm.nvvm.sust.b.3d.v4i8.zero">,
3403     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_zero">;
3404 def int_nvvm_sust_b_3d_v4i16_zero
3405   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3406                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3407               "llvm.nvvm.sust.b.3d.v4i16.zero">,
3408     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_zero">;
3409 def int_nvvm_sust_b_3d_v4i32_zero
3410   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3411                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3412               "llvm.nvvm.sust.b.3d.v4i32.zero">,
3413     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_zero">;
3414
3415
3416
3417 // Formatted
3418
3419 def int_nvvm_sust_p_1d_i8_trap
3420   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3421               "llvm.nvvm.sust.p.1d.i8.trap">,
3422     GCCBuiltin<"__nvvm_sust_p_1d_i8_trap">;
3423 def int_nvvm_sust_p_1d_i16_trap
3424   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3425               "llvm.nvvm.sust.p.1d.i16.trap">,
3426     GCCBuiltin<"__nvvm_sust_p_1d_i16_trap">;
3427 def int_nvvm_sust_p_1d_i32_trap
3428   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3429               "llvm.nvvm.sust.p.1d.i32.trap">,
3430     GCCBuiltin<"__nvvm_sust_p_1d_i32_trap">;
3431 def int_nvvm_sust_p_1d_v2i8_trap
3432   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3433               "llvm.nvvm.sust.p.1d.v2i8.trap">,
3434     GCCBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
3435 def int_nvvm_sust_p_1d_v2i16_trap
3436   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3437               "llvm.nvvm.sust.p.1d.v2i16.trap">,
3438     GCCBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
3439 def int_nvvm_sust_p_1d_v2i32_trap
3440   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3441               "llvm.nvvm.sust.p.1d.v2i32.trap">,
3442     GCCBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
3443 def int_nvvm_sust_p_1d_v4i8_trap
3444   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3445                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3446               "llvm.nvvm.sust.p.1d.v4i8.trap">,
3447     GCCBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
3448 def int_nvvm_sust_p_1d_v4i16_trap
3449   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3450                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3451               "llvm.nvvm.sust.p.1d.v4i16.trap">,
3452     GCCBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
3453 def int_nvvm_sust_p_1d_v4i32_trap
3454   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3455                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3456               "llvm.nvvm.sust.p.1d.v4i32.trap">,
3457     GCCBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
3458
3459
3460 def int_nvvm_sust_p_1d_array_i8_trap
3461   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3462               "llvm.nvvm.sust.p.1d.array.i8.trap">,
3463     GCCBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
3464 def int_nvvm_sust_p_1d_array_i16_trap
3465   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3466               "llvm.nvvm.sust.p.1d.array.i16.trap">,
3467     GCCBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
3468 def int_nvvm_sust_p_1d_array_i32_trap
3469   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3470               "llvm.nvvm.sust.p.1d.array.i32.trap">,
3471     GCCBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
3472 def int_nvvm_sust_p_1d_array_v2i8_trap
3473   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3474                    llvm_i16_ty, llvm_i16_ty], [],
3475               "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
3476     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
3477 def int_nvvm_sust_p_1d_array_v2i16_trap
3478   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3479                    llvm_i16_ty, llvm_i16_ty], [],
3480               "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
3481     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
3482 def int_nvvm_sust_p_1d_array_v2i32_trap
3483   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3484                    llvm_i32_ty, llvm_i32_ty], [],
3485               "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
3486     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
3487 def int_nvvm_sust_p_1d_array_v4i8_trap
3488   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3489                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3490               "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
3491     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
3492 def int_nvvm_sust_p_1d_array_v4i16_trap
3493   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3494                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3495               "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
3496     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
3497 def int_nvvm_sust_p_1d_array_v4i32_trap
3498   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3499                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3500               "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
3501     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
3502
3503
3504 def int_nvvm_sust_p_2d_i8_trap
3505   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3506               "llvm.nvvm.sust.p.2d.i8.trap">,
3507     GCCBuiltin<"__nvvm_sust_p_2d_i8_trap">;
3508 def int_nvvm_sust_p_2d_i16_trap
3509   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3510               "llvm.nvvm.sust.p.2d.i16.trap">,
3511     GCCBuiltin<"__nvvm_sust_p_2d_i16_trap">;
3512 def int_nvvm_sust_p_2d_i32_trap
3513   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3514               "llvm.nvvm.sust.p.2d.i32.trap">,
3515     GCCBuiltin<"__nvvm_sust_p_2d_i32_trap">;
3516 def int_nvvm_sust_p_2d_v2i8_trap
3517   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3518                    llvm_i16_ty, llvm_i16_ty], [],
3519               "llvm.nvvm.sust.p.2d.v2i8.trap">,
3520     GCCBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
3521 def int_nvvm_sust_p_2d_v2i16_trap
3522   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3523                    llvm_i16_ty, llvm_i16_ty], [],
3524               "llvm.nvvm.sust.p.2d.v2i16.trap">,
3525     GCCBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
3526 def int_nvvm_sust_p_2d_v2i32_trap
3527   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3528                    llvm_i32_ty, llvm_i32_ty], [],
3529               "llvm.nvvm.sust.p.2d.v2i32.trap">,
3530     GCCBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
3531 def int_nvvm_sust_p_2d_v4i8_trap
3532   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3533                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3534               "llvm.nvvm.sust.p.2d.v4i8.trap">,
3535     GCCBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
3536 def int_nvvm_sust_p_2d_v4i16_trap
3537   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3538                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3539               "llvm.nvvm.sust.p.2d.v4i16.trap">,
3540     GCCBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
3541 def int_nvvm_sust_p_2d_v4i32_trap
3542   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3543                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3544               "llvm.nvvm.sust.p.2d.v4i32.trap">,
3545     GCCBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
3546
3547
3548 def int_nvvm_sust_p_2d_array_i8_trap
3549   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3550                    llvm_i32_ty, llvm_i16_ty], [],
3551               "llvm.nvvm.sust.p.2d.array.i8.trap">,
3552     GCCBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
3553 def int_nvvm_sust_p_2d_array_i16_trap
3554   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3555                    llvm_i32_ty, llvm_i16_ty], [],
3556               "llvm.nvvm.sust.p.2d.array.i16.trap">,
3557     GCCBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
3558 def int_nvvm_sust_p_2d_array_i32_trap
3559   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3560                    llvm_i32_ty, llvm_i32_ty], [],
3561               "llvm.nvvm.sust.p.2d.array.i32.trap">,
3562     GCCBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
3563 def int_nvvm_sust_p_2d_array_v2i8_trap
3564   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3565                    llvm_i16_ty, llvm_i16_ty], [],
3566               "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
3567     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
3568 def int_nvvm_sust_p_2d_array_v2i16_trap
3569   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3570                    llvm_i16_ty, llvm_i16_ty], [],
3571               "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
3572     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
3573 def int_nvvm_sust_p_2d_array_v2i32_trap
3574   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3575                    llvm_i32_ty, llvm_i32_ty], [],
3576               "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
3577     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
3578 def int_nvvm_sust_p_2d_array_v4i8_trap
3579   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3580                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3581               "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
3582     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
3583 def int_nvvm_sust_p_2d_array_v4i16_trap
3584   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3585                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3586               "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
3587     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
3588 def int_nvvm_sust_p_2d_array_v4i32_trap
3589   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3590                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3591               "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
3592     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
3593
3594
3595 def int_nvvm_sust_p_3d_i8_trap
3596   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3597                    llvm_i32_ty, llvm_i16_ty], [],
3598               "llvm.nvvm.sust.p.3d.i8.trap">,
3599     GCCBuiltin<"__nvvm_sust_p_3d_i8_trap">;
3600 def int_nvvm_sust_p_3d_i16_trap
3601   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3602                    llvm_i32_ty, llvm_i16_ty], [],
3603               "llvm.nvvm.sust.p.3d.i16.trap">,
3604     GCCBuiltin<"__nvvm_sust_p_3d_i16_trap">;
3605 def int_nvvm_sust_p_3d_i32_trap
3606   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3607                    llvm_i32_ty, llvm_i32_ty], [],
3608               "llvm.nvvm.sust.p.3d.i32.trap">,
3609     GCCBuiltin<"__nvvm_sust_p_3d_i32_trap">;
3610 def int_nvvm_sust_p_3d_v2i8_trap
3611   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3612                    llvm_i16_ty, llvm_i16_ty], [],
3613               "llvm.nvvm.sust.p.3d.v2i8.trap">,
3614     GCCBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
3615 def int_nvvm_sust_p_3d_v2i16_trap
3616   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3617                    llvm_i16_ty, llvm_i16_ty], [],
3618               "llvm.nvvm.sust.p.3d.v2i16.trap">,
3619     GCCBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
3620 def int_nvvm_sust_p_3d_v2i32_trap
3621   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3622                    llvm_i32_ty, llvm_i32_ty], [],
3623               "llvm.nvvm.sust.p.3d.v2i32.trap">,
3624     GCCBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
3625 def int_nvvm_sust_p_3d_v4i8_trap
3626   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3627                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3628               "llvm.nvvm.sust.p.3d.v4i8.trap">,
3629     GCCBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
3630 def int_nvvm_sust_p_3d_v4i16_trap
3631   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3632                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3633               "llvm.nvvm.sust.p.3d.v4i16.trap">,
3634     GCCBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
3635 def int_nvvm_sust_p_3d_v4i32_trap
3636   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3637                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3638               "llvm.nvvm.sust.p.3d.v4i32.trap">,
3639     GCCBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
3640
3641
3642 def int_nvvm_rotate_b32
3643   : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
3644               [IntrNoMem], "llvm.nvvm.rotate.b32">,
3645               GCCBuiltin<"__nvvm_rotate_b32">;
3646
3647 def int_nvvm_rotate_b64
3648   :Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
3649              [IntrNoMem], "llvm.nvvm.rotate.b64">,
3650              GCCBuiltin<"__nvvm_rotate_b64">;
3651
3652 def int_nvvm_rotate_right_b64
3653   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
3654               [IntrNoMem], "llvm.nvvm.rotate.right.b64">,
3655               GCCBuiltin<"__nvvm_rotate_right_b64">;
3656
3657 def int_nvvm_swap_lo_hi_b64
3658   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
3659               [IntrNoMem], "llvm.nvvm.swap.lo.hi.b64">,
3660               GCCBuiltin<"__nvvm_swap_lo_hi_b64">;
3661
3662
3663 // Old PTX back-end intrinsics retained here for backwards-compatibility
3664
3665 multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> {
3666 // FIXME: Do we need the 128-bit integer type version?
3667 //    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem]>;
3668
3669 // FIXME: Enable this once v4i32 support is enabled in back-end.
3670 //    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>;
3671
3672   def _x     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3673                GCCBuiltin<!strconcat(prefix, "_x")>;
3674   def _y     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3675                GCCBuiltin<!strconcat(prefix, "_y")>;
3676   def _z     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3677                GCCBuiltin<!strconcat(prefix, "_z")>;
3678   def _w     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3679                GCCBuiltin<!strconcat(prefix, "_w")>;
3680 }
3681
3682 class PTXReadSpecialRegisterIntrinsic_r32<string name>
3683   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3684     GCCBuiltin<name>;
3685
3686 class PTXReadSpecialRegisterIntrinsic_r64<string name>
3687   : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>,
3688     GCCBuiltin<name>;
3689
3690 defm int_ptx_read_tid        : PTXReadSpecialRegisterIntrinsic_v4i32
3691                                <"__builtin_ptx_read_tid">;
3692 defm int_ptx_read_ntid       : PTXReadSpecialRegisterIntrinsic_v4i32
3693                                <"__builtin_ptx_read_ntid">;
3694
3695 def int_ptx_read_laneid      : PTXReadSpecialRegisterIntrinsic_r32
3696                                <"__builtin_ptx_read_laneid">;
3697 def int_ptx_read_warpid      : PTXReadSpecialRegisterIntrinsic_r32
3698                                <"__builtin_ptx_read_warpid">;
3699 def int_ptx_read_nwarpid     : PTXReadSpecialRegisterIntrinsic_r32
3700                                <"__builtin_ptx_read_nwarpid">;
3701
3702 defm int_ptx_read_ctaid      : PTXReadSpecialRegisterIntrinsic_v4i32
3703                                <"__builtin_ptx_read_ctaid">;
3704 defm int_ptx_read_nctaid     : PTXReadSpecialRegisterIntrinsic_v4i32
3705                                <"__builtin_ptx_read_nctaid">;
3706
3707 def int_ptx_read_smid        : PTXReadSpecialRegisterIntrinsic_r32
3708                                <"__builtin_ptx_read_smid">;
3709 def int_ptx_read_nsmid       : PTXReadSpecialRegisterIntrinsic_r32
3710                                <"__builtin_ptx_read_nsmid">;
3711 def int_ptx_read_gridid      : PTXReadSpecialRegisterIntrinsic_r32
3712                                <"__builtin_ptx_read_gridid">;
3713
3714 def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32
3715                                <"__builtin_ptx_read_lanemask_eq">;
3716 def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32
3717                                <"__builtin_ptx_read_lanemask_le">;
3718 def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32
3719                                <"__builtin_ptx_read_lanemask_lt">;
3720 def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32
3721                                <"__builtin_ptx_read_lanemask_ge">;
3722 def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32
3723                                <"__builtin_ptx_read_lanemask_gt">;
3724
3725 def int_ptx_read_clock       : PTXReadSpecialRegisterIntrinsic_r32
3726                                <"__builtin_ptx_read_clock">;
3727 def int_ptx_read_clock64     : PTXReadSpecialRegisterIntrinsic_r64
3728                                <"__builtin_ptx_read_clock64">;
3729
3730 def int_ptx_read_pm0         : PTXReadSpecialRegisterIntrinsic_r32
3731                                <"__builtin_ptx_read_pm0">;
3732 def int_ptx_read_pm1         : PTXReadSpecialRegisterIntrinsic_r32
3733                                <"__builtin_ptx_read_pm1">;
3734 def int_ptx_read_pm2         : PTXReadSpecialRegisterIntrinsic_r32
3735                                <"__builtin_ptx_read_pm2">;
3736 def int_ptx_read_pm3         : PTXReadSpecialRegisterIntrinsic_r32
3737                                <"__builtin_ptx_read_pm3">;
3738
3739 def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>,
3740                        GCCBuiltin<"__builtin_ptx_bar_sync">;