[opaque pointer types] Push the passing of value types up from Function/GlobalVariabl...
[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>>, llvm_i32_ty],
801   [IntrReadMem, NoCapture<0>],
802   "llvm.nvvm.ldu.global.i">;
803 def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
804   [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty],
805   [IntrReadMem, NoCapture<0>],
806   "llvm.nvvm.ldu.global.f">;
807 def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
808   [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty],
809   [IntrReadMem, NoCapture<0>],
810   "llvm.nvvm.ldu.global.p">;
811
812 // Generated within nvvm. Use for ldg on sm_35 or later
813 def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
814   [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty],
815   [IntrReadMem, NoCapture<0>],
816   "llvm.nvvm.ldg.global.i">;
817 def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
818   [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty],
819   [IntrReadMem, NoCapture<0>],
820   "llvm.nvvm.ldg.global.f">;
821 def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
822   [LLVMAnyPointerType<LLVMMatchType<0>>, llvm_i32_ty],
823   [IntrReadMem, NoCapture<0>],
824   "llvm.nvvm.ldg.global.p">;
825
826 // Use for generic pointers
827 // - These intrinsics are used to convert address spaces.
828 // - The input pointer and output pointer must have the same type, except for
829 //   the address-space. (This restriction is not enforced here as there is
830 //   currently no way to describe it).
831 // - This complements the llvm bitcast, which can be used to cast one type
832 //   of pointer to another type of pointer, while the address space remains
833 //   the same.
834 def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
835                  [llvm_anyptr_ty], [IntrNoMem],
836                  "llvm.nvvm.ptr.local.to.gen">;
837 def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
838                  [llvm_anyptr_ty], [IntrNoMem],
839                  "llvm.nvvm.ptr.shared.to.gen">;
840 def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
841                  [llvm_anyptr_ty], [IntrNoMem],
842                  "llvm.nvvm.ptr.global.to.gen">;
843 def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
844                  [llvm_anyptr_ty], [IntrNoMem],
845                  "llvm.nvvm.ptr.constant.to.gen">;
846
847 def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
848                  [llvm_anyptr_ty], [IntrNoMem],
849                  "llvm.nvvm.ptr.gen.to.global">;
850 def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
851                  [llvm_anyptr_ty], [IntrNoMem],
852                  "llvm.nvvm.ptr.gen.to.shared">;
853 def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
854                  [llvm_anyptr_ty], [IntrNoMem],
855                  "llvm.nvvm.ptr.gen.to.local">;
856 def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty],
857                  [llvm_anyptr_ty], [IntrNoMem],
858                  "llvm.nvvm.ptr.gen.to.constant">;
859
860 // Used in nvvm internally to help address space opt and ptx code generation
861 // This is for params that are passed to kernel functions by pointer by-val.
862 def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
863                                      [llvm_anyptr_ty],
864                                    [IntrNoMem],
865                                    "llvm.nvvm.ptr.gen.to.param">;
866
867 // Move intrinsics, used in nvvm internally
868
869 def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
870   "llvm.nvvm.move.i16">;
871 def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
872   "llvm.nvvm.move.i32">;
873 def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
874   "llvm.nvvm.move.i64">;
875 def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
876   [IntrNoMem], "llvm.nvvm.move.float">;
877 def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
878   [IntrNoMem], "llvm.nvvm.move.double">;
879 def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
880   [IntrNoMem, NoCapture<0>], "llvm.nvvm.move.ptr">;
881
882
883 // For getting the handle from a texture or surface variable
884 def int_nvvm_texsurf_handle
885   : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyi64ptr_ty],
886               [IntrNoMem], "llvm.nvvm.texsurf.handle">;
887 def int_nvvm_texsurf_handle_internal
888   : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
889               [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
890
891 /// Error / Warn
892 def int_nvvm_compiler_error :
893     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
894 def int_nvvm_compiler_warn :
895     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
896
897 def int_nvvm_reflect :
898   Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty], [IntrNoMem], "llvm.nvvm.reflect">;
899
900 // isspacep.{const, global, local, shared}
901 def int_nvvm_isspacep_const
902   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
903               "llvm.nvvm.isspacep.const">,
904     GCCBuiltin<"__nvvm_isspacep_const">;
905 def int_nvvm_isspacep_global
906   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
907               "llvm.nvvm.isspacep.global">,
908     GCCBuiltin<"__nvvm_isspacep_global">;
909 def int_nvvm_isspacep_local
910   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
911               "llvm.nvvm.isspacep.local">,
912     GCCBuiltin<"__nvvm_isspacep_local">;
913 def int_nvvm_isspacep_shared
914   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
915               "llvm.nvvm.isspacep.shared">,
916     GCCBuiltin<"__nvvm_isspacep_shared">;
917
918 // Environment register read
919 def int_nvvm_read_ptx_sreg_envreg0
920   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
921               "llvm.nvvm.read.ptx.sreg.envreg0">,
922     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
923 def int_nvvm_read_ptx_sreg_envreg1
924   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
925               "llvm.nvvm.read.ptx.sreg.envreg1">,
926     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
927 def int_nvvm_read_ptx_sreg_envreg2
928   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
929               "llvm.nvvm.read.ptx.sreg.envreg2">,
930     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
931 def int_nvvm_read_ptx_sreg_envreg3
932   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
933               "llvm.nvvm.read.ptx.sreg.envreg3">,
934     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
935 def int_nvvm_read_ptx_sreg_envreg4
936   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
937               "llvm.nvvm.read.ptx.sreg.envreg4">,
938     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
939 def int_nvvm_read_ptx_sreg_envreg5
940   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
941               "llvm.nvvm.read.ptx.sreg.envreg5">,
942     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
943 def int_nvvm_read_ptx_sreg_envreg6
944   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
945               "llvm.nvvm.read.ptx.sreg.envreg6">,
946     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
947 def int_nvvm_read_ptx_sreg_envreg7
948   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
949               "llvm.nvvm.read.ptx.sreg.envreg7">,
950     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
951 def int_nvvm_read_ptx_sreg_envreg8
952   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
953               "llvm.nvvm.read.ptx.sreg.envreg8">,
954     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
955 def int_nvvm_read_ptx_sreg_envreg9
956   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
957               "llvm.nvvm.read.ptx.sreg.envreg9">,
958     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
959 def int_nvvm_read_ptx_sreg_envreg10
960   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
961               "llvm.nvvm.read.ptx.sreg.envreg10">,
962     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
963 def int_nvvm_read_ptx_sreg_envreg11
964   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
965               "llvm.nvvm.read.ptx.sreg.envreg11">,
966     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
967 def int_nvvm_read_ptx_sreg_envreg12
968   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
969               "llvm.nvvm.read.ptx.sreg.envreg12">,
970     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
971 def int_nvvm_read_ptx_sreg_envreg13
972   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
973               "llvm.nvvm.read.ptx.sreg.envreg13">,
974     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
975 def int_nvvm_read_ptx_sreg_envreg14
976   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
977               "llvm.nvvm.read.ptx.sreg.envreg14">,
978     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
979 def int_nvvm_read_ptx_sreg_envreg15
980   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
981               "llvm.nvvm.read.ptx.sreg.envreg15">,
982     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
983 def int_nvvm_read_ptx_sreg_envreg16
984   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
985               "llvm.nvvm.read.ptx.sreg.envreg16">,
986     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
987 def int_nvvm_read_ptx_sreg_envreg17
988   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
989               "llvm.nvvm.read.ptx.sreg.envreg17">,
990     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
991 def int_nvvm_read_ptx_sreg_envreg18
992   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
993               "llvm.nvvm.read.ptx.sreg.envreg18">,
994     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
995 def int_nvvm_read_ptx_sreg_envreg19
996   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
997               "llvm.nvvm.read.ptx.sreg.envreg19">,
998     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
999 def int_nvvm_read_ptx_sreg_envreg20
1000   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1001               "llvm.nvvm.read.ptx.sreg.envreg20">,
1002     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
1003 def int_nvvm_read_ptx_sreg_envreg21
1004   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1005               "llvm.nvvm.read.ptx.sreg.envreg21">,
1006     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
1007 def int_nvvm_read_ptx_sreg_envreg22
1008   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1009               "llvm.nvvm.read.ptx.sreg.envreg22">,
1010     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1011 def int_nvvm_read_ptx_sreg_envreg23
1012   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1013               "llvm.nvvm.read.ptx.sreg.envreg23">,
1014     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1015 def int_nvvm_read_ptx_sreg_envreg24
1016   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1017               "llvm.nvvm.read.ptx.sreg.envreg24">,
1018     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1019 def int_nvvm_read_ptx_sreg_envreg25
1020   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1021               "llvm.nvvm.read.ptx.sreg.envreg25">,
1022     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1023 def int_nvvm_read_ptx_sreg_envreg26
1024   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1025               "llvm.nvvm.read.ptx.sreg.envreg26">,
1026     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1027 def int_nvvm_read_ptx_sreg_envreg27
1028   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1029               "llvm.nvvm.read.ptx.sreg.envreg27">,
1030     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1031 def int_nvvm_read_ptx_sreg_envreg28
1032   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1033               "llvm.nvvm.read.ptx.sreg.envreg28">,
1034     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1035 def int_nvvm_read_ptx_sreg_envreg29
1036   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1037               "llvm.nvvm.read.ptx.sreg.envreg29">,
1038     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1039 def int_nvvm_read_ptx_sreg_envreg30
1040   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1041               "llvm.nvvm.read.ptx.sreg.envreg30">,
1042     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1043 def int_nvvm_read_ptx_sreg_envreg31
1044   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1045               "llvm.nvvm.read.ptx.sreg.envreg31">,
1046     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1047
1048
1049 // Texture Fetch
1050 // texmode_independent
1051 def int_nvvm_tex_1d_v4f32_s32
1052   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1053               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1054               "llvm.nvvm.tex.1d.v4f32.s32">;
1055 def int_nvvm_tex_1d_v4f32_f32
1056   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1057               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1058               "llvm.nvvm.tex.1d.v4f32.f32">;
1059 def int_nvvm_tex_1d_level_v4f32_f32
1060   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1061               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1062               "llvm.nvvm.tex.1d.level.v4f32.f32">;
1063 def int_nvvm_tex_1d_grad_v4f32_f32
1064   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1065               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1066                llvm_float_ty], [],
1067               "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1068 def int_nvvm_tex_1d_v4s32_s32
1069   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1070               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1071               "llvm.nvvm.tex.1d.v4s32.s32">;
1072 def int_nvvm_tex_1d_v4s32_f32
1073   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1074               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1075               "llvm.nvvm.tex.1d.v4s32.f32">;
1076 def int_nvvm_tex_1d_level_v4s32_f32
1077   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1078               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1079               "llvm.nvvm.tex.1d.level.v4s32.f32">;
1080 def int_nvvm_tex_1d_grad_v4s32_f32
1081   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1082               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1083                llvm_float_ty], [],
1084               "llvm.nvvm.tex.1d.grad.v4s32.f32">;
1085 def int_nvvm_tex_1d_v4u32_s32
1086   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1087               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1088               "llvm.nvvm.tex.1d.v4u32.s32">;
1089 def int_nvvm_tex_1d_v4u32_f32
1090   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1091               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1092               "llvm.nvvm.tex.1d.v4u32.f32">;
1093 def int_nvvm_tex_1d_level_v4u32_f32
1094   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1095               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1096               "llvm.nvvm.tex.1d.level.v4u32.f32">;
1097 def int_nvvm_tex_1d_grad_v4u32_f32
1098   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1099               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1100                llvm_float_ty], [],
1101               "llvm.nvvm.tex.1d.grad.v4u32.f32">;
1102
1103 def int_nvvm_tex_1d_array_v4f32_s32
1104   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1105               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1106               "llvm.nvvm.tex.1d.array.v4f32.s32">;
1107 def int_nvvm_tex_1d_array_v4f32_f32
1108   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1109               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1110               "llvm.nvvm.tex.1d.array.v4f32.f32">;
1111 def int_nvvm_tex_1d_array_level_v4f32_f32
1112   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1113               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1114                llvm_float_ty], [],
1115               "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1116 def int_nvvm_tex_1d_array_grad_v4f32_f32
1117   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1118               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1119                llvm_float_ty, llvm_float_ty], [],
1120               "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1121 def int_nvvm_tex_1d_array_v4s32_s32
1122   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1123               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1124               "llvm.nvvm.tex.1d.array.v4s32.s32">;
1125 def int_nvvm_tex_1d_array_v4s32_f32
1126   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1127               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1128               "llvm.nvvm.tex.1d.array.v4s32.f32">;
1129 def int_nvvm_tex_1d_array_level_v4s32_f32
1130   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1131               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1132                llvm_float_ty], [],
1133               "llvm.nvvm.tex.1d.array.level.v4s32.f32">;
1134 def int_nvvm_tex_1d_array_grad_v4s32_f32
1135   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1136               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1137                llvm_float_ty, llvm_float_ty], [],
1138               "llvm.nvvm.tex.1d.array.grad.v4s32.f32">;
1139 def int_nvvm_tex_1d_array_v4u32_s32
1140   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1141               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1142               "llvm.nvvm.tex.1d.array.v4u32.s32">;
1143 def int_nvvm_tex_1d_array_v4u32_f32
1144   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1145               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1146               "llvm.nvvm.tex.1d.array.v4u32.f32">;
1147 def int_nvvm_tex_1d_array_level_v4u32_f32
1148   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1149               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1150                llvm_float_ty], [],
1151               "llvm.nvvm.tex.1d.array.level.v4u32.f32">;
1152 def int_nvvm_tex_1d_array_grad_v4u32_f32
1153   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1154               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1155                llvm_float_ty, llvm_float_ty], [],
1156               "llvm.nvvm.tex.1d.array.grad.v4u32.f32">;
1157
1158 def int_nvvm_tex_2d_v4f32_s32
1159   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1160               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1161               "llvm.nvvm.tex.2d.v4f32.s32">;
1162 def int_nvvm_tex_2d_v4f32_f32
1163   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1164               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1165               "llvm.nvvm.tex.2d.v4f32.f32">;
1166 def int_nvvm_tex_2d_level_v4f32_f32
1167   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1168               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1169                llvm_float_ty], [],
1170               "llvm.nvvm.tex.2d.level.v4f32.f32">;
1171 def int_nvvm_tex_2d_grad_v4f32_f32
1172   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1173               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1174                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1175               "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1176 def int_nvvm_tex_2d_v4s32_s32
1177   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1178               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1179               "llvm.nvvm.tex.2d.v4s32.s32">;
1180 def int_nvvm_tex_2d_v4s32_f32
1181   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1182               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1183               "llvm.nvvm.tex.2d.v4s32.f32">;
1184 def int_nvvm_tex_2d_level_v4s32_f32
1185   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1186               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1187                llvm_float_ty], [],
1188               "llvm.nvvm.tex.2d.level.v4s32.f32">;
1189 def int_nvvm_tex_2d_grad_v4s32_f32
1190   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1191               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1192                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1193               "llvm.nvvm.tex.2d.grad.v4s32.f32">;
1194 def int_nvvm_tex_2d_v4u32_s32
1195   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1196               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1197               "llvm.nvvm.tex.2d.v4u32.s32">;
1198 def int_nvvm_tex_2d_v4u32_f32
1199   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1200               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1201               "llvm.nvvm.tex.2d.v4u32.f32">;
1202 def int_nvvm_tex_2d_level_v4u32_f32
1203   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1204               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1205                llvm_float_ty], [],
1206               "llvm.nvvm.tex.2d.level.v4u32.f32">;
1207 def int_nvvm_tex_2d_grad_v4u32_f32
1208   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1209               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1210                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1211               "llvm.nvvm.tex.2d.grad.v4u32.f32">;
1212
1213 def int_nvvm_tex_2d_array_v4f32_s32
1214   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1215               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1216                llvm_i32_ty], [],
1217               "llvm.nvvm.tex.2d.array.v4f32.s32">;
1218 def int_nvvm_tex_2d_array_v4f32_f32
1219   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1220               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1221                llvm_float_ty], [],
1222               "llvm.nvvm.tex.2d.array.v4f32.f32">;
1223 def int_nvvm_tex_2d_array_level_v4f32_f32
1224   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1225               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1226                llvm_float_ty, llvm_float_ty], [],
1227               "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1228 def int_nvvm_tex_2d_array_grad_v4f32_f32
1229   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1230               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1231                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1232                llvm_float_ty], [],
1233               "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1234 def int_nvvm_tex_2d_array_v4s32_s32
1235   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1236               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1237                llvm_i32_ty], [],
1238               "llvm.nvvm.tex.2d.array.v4s32.s32">;
1239 def int_nvvm_tex_2d_array_v4s32_f32
1240   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1241               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1242                llvm_float_ty], [],
1243               "llvm.nvvm.tex.2d.array.v4s32.f32">;
1244 def int_nvvm_tex_2d_array_level_v4s32_f32
1245   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1246               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1247                llvm_float_ty, llvm_float_ty], [],
1248               "llvm.nvvm.tex.2d.array.level.v4s32.f32">;
1249 def int_nvvm_tex_2d_array_grad_v4s32_f32
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_float_ty,
1252                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1253                llvm_float_ty], [],
1254               "llvm.nvvm.tex.2d.array.grad.v4s32.f32">;
1255 def int_nvvm_tex_2d_array_v4u32_s32
1256   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1257               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1258                llvm_i32_ty], [],
1259               "llvm.nvvm.tex.2d.array.v4u32.s32">;
1260 def int_nvvm_tex_2d_array_v4u32_f32
1261   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1262               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1263                llvm_float_ty], [],
1264               "llvm.nvvm.tex.2d.array.v4u32.f32">;
1265 def int_nvvm_tex_2d_array_level_v4u32_f32
1266   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1267               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1268                llvm_float_ty, llvm_float_ty], [],
1269               "llvm.nvvm.tex.2d.array.level.v4u32.f32">;
1270 def int_nvvm_tex_2d_array_grad_v4u32_f32
1271   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1272               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1273                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1274                llvm_float_ty], [],
1275               "llvm.nvvm.tex.2d.array.grad.v4u32.f32">;
1276
1277 def int_nvvm_tex_3d_v4f32_s32
1278   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1279               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1280               [], "llvm.nvvm.tex.3d.v4f32.s32">;
1281 def int_nvvm_tex_3d_v4f32_f32
1282   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1283               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1284                llvm_float_ty], [],
1285               "llvm.nvvm.tex.3d.v4f32.f32">;
1286 def int_nvvm_tex_3d_level_v4f32_f32
1287   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1288               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1289                llvm_float_ty, llvm_float_ty], [],
1290               "llvm.nvvm.tex.3d.level.v4f32.f32">;
1291 def int_nvvm_tex_3d_grad_v4f32_f32
1292   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1293               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1294                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1295                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1296               "llvm.nvvm.tex.3d.grad.v4f32.f32">;
1297 def int_nvvm_tex_3d_v4s32_s32
1298   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1299               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1300               [], "llvm.nvvm.tex.3d.v4s32.s32">;
1301 def int_nvvm_tex_3d_v4s32_f32
1302   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1303               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1304                llvm_float_ty], [],
1305               "llvm.nvvm.tex.3d.v4s32.f32">;
1306 def int_nvvm_tex_3d_level_v4s32_f32
1307   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1308               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1309                llvm_float_ty, llvm_float_ty], [],
1310               "llvm.nvvm.tex.3d.level.v4s32.f32">;
1311 def int_nvvm_tex_3d_grad_v4s32_f32
1312   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1313               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1314                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1315                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1316               "llvm.nvvm.tex.3d.grad.v4s32.f32">;
1317 def int_nvvm_tex_3d_v4u32_s32
1318   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1319               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1320               [], "llvm.nvvm.tex.3d.v4u32.s32">;
1321 def int_nvvm_tex_3d_v4u32_f32
1322   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1323               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1324                llvm_float_ty], [],
1325               "llvm.nvvm.tex.3d.v4u32.f32">;
1326 def int_nvvm_tex_3d_level_v4u32_f32
1327   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1328               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1329                llvm_float_ty, llvm_float_ty], [],
1330               "llvm.nvvm.tex.3d.level.v4u32.f32">;
1331 def int_nvvm_tex_3d_grad_v4u32_f32
1332   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1333               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1334                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1335                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1336               "llvm.nvvm.tex.3d.grad.v4u32.f32">;
1337
1338 def int_nvvm_tex_cube_v4f32_f32
1339   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1340               [llvm_i64_ty, llvm_i64_ty,
1341                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1342               "llvm.nvvm.tex.cube.v4f32.f32">;
1343 def int_nvvm_tex_cube_level_v4f32_f32
1344   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1345               [llvm_i64_ty, llvm_i64_ty,
1346                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1347               "llvm.nvvm.tex.cube.level.v4f32.f32">;
1348 def int_nvvm_tex_cube_v4s32_f32
1349   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1350               [llvm_i64_ty, llvm_i64_ty,
1351                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1352               "llvm.nvvm.tex.cube.v4s32.f32">;
1353 def int_nvvm_tex_cube_level_v4s32_f32
1354   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1355               [llvm_i64_ty, llvm_i64_ty,
1356                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1357               "llvm.nvvm.tex.cube.level.v4s32.f32">;
1358 def int_nvvm_tex_cube_v4u32_f32
1359   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1360               [llvm_i64_ty, llvm_i64_ty,
1361                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1362               "llvm.nvvm.tex.cube.v4u32.f32">;
1363 def int_nvvm_tex_cube_level_v4u32_f32
1364   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1365               [llvm_i64_ty, llvm_i64_ty,
1366                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1367               "llvm.nvvm.tex.cube.level.v4u32.f32">;
1368
1369 def int_nvvm_tex_cube_array_v4f32_f32
1370   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1371               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1372                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1373               "llvm.nvvm.tex.cube.array.v4f32.f32">;
1374 def int_nvvm_tex_cube_array_level_v4f32_f32
1375   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1376               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1377                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1378               "llvm.nvvm.tex.cube.array.level.v4f32.f32">;
1379 def int_nvvm_tex_cube_array_v4s32_f32
1380   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1381               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1382                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1383               "llvm.nvvm.tex.cube.array.v4s32.f32">;
1384 def int_nvvm_tex_cube_array_level_v4s32_f32
1385   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1386               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1387                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1388               "llvm.nvvm.tex.cube.array.level.v4s32.f32">;
1389 def int_nvvm_tex_cube_array_v4u32_f32
1390   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1391               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1392                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1393               "llvm.nvvm.tex.cube.array.v4u32.f32">;
1394 def int_nvvm_tex_cube_array_level_v4u32_f32
1395   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1396               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
1397                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1398               "llvm.nvvm.tex.cube.array.level.v4u32.f32">;
1399
1400 def int_nvvm_tld4_r_2d_v4f32_f32
1401   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1402               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1403               "llvm.nvvm.tld4.r.2d.v4f32.f32">;
1404 def int_nvvm_tld4_g_2d_v4f32_f32
1405   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1406               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1407               "llvm.nvvm.tld4.g.2d.v4f32.f32">;
1408 def int_nvvm_tld4_b_2d_v4f32_f32
1409   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1410               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1411               "llvm.nvvm.tld4.b.2d.v4f32.f32">;
1412 def int_nvvm_tld4_a_2d_v4f32_f32
1413   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1414               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1415               "llvm.nvvm.tld4.a.2d.v4f32.f32">;
1416 def int_nvvm_tld4_r_2d_v4s32_f32
1417   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1418               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1419               "llvm.nvvm.tld4.r.2d.v4s32.f32">;
1420 def int_nvvm_tld4_g_2d_v4s32_f32
1421   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1422               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1423               "llvm.nvvm.tld4.g.2d.v4s32.f32">;
1424 def int_nvvm_tld4_b_2d_v4s32_f32
1425   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1426               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1427               "llvm.nvvm.tld4.b.2d.v4s32.f32">;
1428 def int_nvvm_tld4_a_2d_v4s32_f32
1429   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1430               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1431               "llvm.nvvm.tld4.a.2d.v4s32.f32">;
1432 def int_nvvm_tld4_r_2d_v4u32_f32
1433   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1434               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1435               "llvm.nvvm.tld4.r.2d.v4u32.f32">;
1436 def int_nvvm_tld4_g_2d_v4u32_f32
1437   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1438               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1439               "llvm.nvvm.tld4.g.2d.v4u32.f32">;
1440 def int_nvvm_tld4_b_2d_v4u32_f32
1441   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1442               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1443               "llvm.nvvm.tld4.b.2d.v4u32.f32">;
1444 def int_nvvm_tld4_a_2d_v4u32_f32
1445   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1446               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1447               "llvm.nvvm.tld4.a.2d.v4u32.f32">;
1448
1449
1450 // texmode_unified
1451 def int_nvvm_tex_unified_1d_v4f32_s32
1452   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1453               [llvm_i64_ty, llvm_i32_ty], [],
1454               "llvm.nvvm.tex.unified.1d.v4f32.s32">;
1455 def int_nvvm_tex_unified_1d_v4f32_f32
1456   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1457               [llvm_i64_ty, llvm_float_ty], [],
1458               "llvm.nvvm.tex.unified.1d.v4f32.f32">;
1459 def int_nvvm_tex_unified_1d_level_v4f32_f32
1460   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1461               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1462               "llvm.nvvm.tex.unified.1d.level.v4f32.f32">;
1463 def int_nvvm_tex_unified_1d_grad_v4f32_f32
1464   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1465               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1466                llvm_float_ty], [],
1467               "llvm.nvvm.tex.unified.1d.grad.v4f32.f32">;
1468 def int_nvvm_tex_unified_1d_v4s32_s32
1469   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1470               [llvm_i64_ty, llvm_i32_ty], [],
1471               "llvm.nvvm.tex.unified.1d.v4s32.s32">;
1472 def int_nvvm_tex_unified_1d_v4s32_f32
1473   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1474               [llvm_i64_ty, llvm_float_ty], [],
1475               "llvm.nvvm.tex.unified.1d.v4s32.f32">;
1476 def int_nvvm_tex_unified_1d_level_v4s32_f32
1477   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1478               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1479               "llvm.nvvm.tex.unified.1d.level.v4s32.f32">;
1480 def int_nvvm_tex_unified_1d_grad_v4s32_f32
1481   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1482               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1483                llvm_float_ty], [],
1484               "llvm.nvvm.tex.unified.1d.grad.v4s32.f32">;
1485 def int_nvvm_tex_unified_1d_v4u32_s32
1486   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1487               [llvm_i64_ty, llvm_i32_ty], [],
1488               "llvm.nvvm.tex.unified.1d.v4u32.s32">;
1489 def int_nvvm_tex_unified_1d_v4u32_f32
1490   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1491               [llvm_i64_ty, llvm_float_ty], [],
1492               "llvm.nvvm.tex.unified.1d.v4u32.f32">;
1493 def int_nvvm_tex_unified_1d_level_v4u32_f32
1494   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1495               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1496               "llvm.nvvm.tex.unified.1d.level.v4u32.f32">;
1497 def int_nvvm_tex_unified_1d_grad_v4u32_f32
1498   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1499               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1500                llvm_float_ty], [],
1501               "llvm.nvvm.tex.unified.1d.grad.v4u32.f32">;
1502
1503 def int_nvvm_tex_unified_1d_array_v4f32_s32
1504   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1505               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1506               "llvm.nvvm.tex.unified.1d.array.v4f32.s32">;
1507 def int_nvvm_tex_unified_1d_array_v4f32_f32
1508   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1509               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1510               "llvm.nvvm.tex.unified.1d.array.v4f32.f32">;
1511 def int_nvvm_tex_unified_1d_array_level_v4f32_f32
1512   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1513               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1514                llvm_float_ty], [],
1515               "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32">;
1516 def int_nvvm_tex_unified_1d_array_grad_v4f32_f32
1517   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1518               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1519                llvm_float_ty, llvm_float_ty], [],
1520               "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32">;
1521 def int_nvvm_tex_unified_1d_array_v4s32_s32
1522   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1523               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1524               "llvm.nvvm.tex.unified.1d.array.v4s32.s32">;
1525 def int_nvvm_tex_unified_1d_array_v4s32_f32
1526   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1527               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1528               "llvm.nvvm.tex.unified.1d.array.v4s32.f32">;
1529 def int_nvvm_tex_unified_1d_array_level_v4s32_f32
1530   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1531               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1532                llvm_float_ty], [],
1533               "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32">;
1534 def int_nvvm_tex_unified_1d_array_grad_v4s32_f32
1535   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1536               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1537                llvm_float_ty, llvm_float_ty], [],
1538               "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32">;
1539 def int_nvvm_tex_unified_1d_array_v4u32_s32
1540   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1541               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1542               "llvm.nvvm.tex.unified.1d.array.v4u32.s32">;
1543 def int_nvvm_tex_unified_1d_array_v4u32_f32
1544   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1545               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1546               "llvm.nvvm.tex.unified.1d.array.v4u32.f32">;
1547 def int_nvvm_tex_unified_1d_array_level_v4u32_f32
1548   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1549               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1550                llvm_float_ty], [],
1551               "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32">;
1552 def int_nvvm_tex_unified_1d_array_grad_v4u32_f32
1553   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1554               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1555                llvm_float_ty, llvm_float_ty], [],
1556               "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32">;
1557
1558 def int_nvvm_tex_unified_2d_v4f32_s32
1559   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1560               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1561               "llvm.nvvm.tex.unified.2d.v4f32.s32">;
1562 def int_nvvm_tex_unified_2d_v4f32_f32
1563   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1564               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1565               "llvm.nvvm.tex.unified.2d.v4f32.f32">;
1566 def int_nvvm_tex_unified_2d_level_v4f32_f32
1567   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1568               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1569                llvm_float_ty], [],
1570               "llvm.nvvm.tex.unified.2d.level.v4f32.f32">;
1571 def int_nvvm_tex_unified_2d_grad_v4f32_f32
1572   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1573               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1574                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1575               "llvm.nvvm.tex.unified.2d.grad.v4f32.f32">;
1576 def int_nvvm_tex_unified_2d_v4s32_s32
1577   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1578               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1579               "llvm.nvvm.tex.unified.2d.v4s32.s32">;
1580 def int_nvvm_tex_unified_2d_v4s32_f32
1581   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1582               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1583               "llvm.nvvm.tex.unified.2d.v4s32.f32">;
1584 def int_nvvm_tex_unified_2d_level_v4s32_f32
1585   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1586               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1587                llvm_float_ty], [],
1588               "llvm.nvvm.tex.unified.2d.level.v4s32.f32">;
1589 def int_nvvm_tex_unified_2d_grad_v4s32_f32
1590   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1591               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1592                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1593               "llvm.nvvm.tex.unified.2d.grad.v4s32.f32">;
1594 def int_nvvm_tex_unified_2d_v4u32_s32
1595   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1596               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1597               "llvm.nvvm.tex.unified.2d.v4u32.s32">;
1598 def int_nvvm_tex_unified_2d_v4u32_f32
1599   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1600               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1601               "llvm.nvvm.tex.unified.2d.v4u32.f32">;
1602 def int_nvvm_tex_unified_2d_level_v4u32_f32
1603   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1604               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1605                llvm_float_ty], [],
1606               "llvm.nvvm.tex.unified.2d.level.v4u32.f32">;
1607 def int_nvvm_tex_unified_2d_grad_v4u32_f32
1608   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1609               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1610                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1611               "llvm.nvvm.tex.unified.2d.grad.v4u32.f32">;
1612
1613 def int_nvvm_tex_unified_2d_array_v4f32_s32
1614   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1615               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1616                llvm_i32_ty], [],
1617               "llvm.nvvm.tex.unified.2d.array.v4f32.s32">;
1618 def int_nvvm_tex_unified_2d_array_v4f32_f32
1619   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1620               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1621                llvm_float_ty], [],
1622               "llvm.nvvm.tex.unified.2d.array.v4f32.f32">;
1623 def int_nvvm_tex_unified_2d_array_level_v4f32_f32
1624   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1625               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1626                llvm_float_ty, llvm_float_ty], [],
1627               "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32">;
1628 def int_nvvm_tex_unified_2d_array_grad_v4f32_f32
1629   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1630               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1631                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1632                llvm_float_ty], [],
1633               "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32">;
1634 def int_nvvm_tex_unified_2d_array_v4s32_s32
1635   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1636               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1637                llvm_i32_ty], [],
1638               "llvm.nvvm.tex.unified.2d.array.v4s32.s32">;
1639 def int_nvvm_tex_unified_2d_array_v4s32_f32
1640   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1641               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1642                llvm_float_ty], [],
1643               "llvm.nvvm.tex.unified.2d.array.v4s32.f32">;
1644 def int_nvvm_tex_unified_2d_array_level_v4s32_f32
1645   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1646               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1647                llvm_float_ty, llvm_float_ty], [],
1648               "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32">;
1649 def int_nvvm_tex_unified_2d_array_grad_v4s32_f32
1650   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1651               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1652                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1653                llvm_float_ty], [],
1654               "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32">;
1655 def int_nvvm_tex_unified_2d_array_v4u32_s32
1656   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1657               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1658                llvm_i32_ty], [],
1659               "llvm.nvvm.tex.unified.2d.array.v4u32.s32">;
1660 def int_nvvm_tex_unified_2d_array_v4u32_f32
1661   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1662               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1663                llvm_float_ty], [],
1664               "llvm.nvvm.tex.unified.2d.array.v4u32.f32">;
1665 def int_nvvm_tex_unified_2d_array_level_v4u32_f32
1666   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1667               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1668                llvm_float_ty, llvm_float_ty], [],
1669               "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32">;
1670 def int_nvvm_tex_unified_2d_array_grad_v4u32_f32
1671   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1672               [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1673                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1674                llvm_float_ty], [],
1675               "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32">;
1676
1677 def int_nvvm_tex_unified_3d_v4f32_s32
1678   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1679               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1680               [], "llvm.nvvm.tex.unified.3d.v4f32.s32">;
1681 def int_nvvm_tex_unified_3d_v4f32_f32
1682   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1683               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1684                llvm_float_ty], [],
1685               "llvm.nvvm.tex.unified.3d.v4f32.f32">;
1686 def int_nvvm_tex_unified_3d_level_v4f32_f32
1687   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1688               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1689                llvm_float_ty, llvm_float_ty], [],
1690               "llvm.nvvm.tex.unified.3d.level.v4f32.f32">;
1691 def int_nvvm_tex_unified_3d_grad_v4f32_f32
1692   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1693               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1694                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1695                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1696               "llvm.nvvm.tex.unified.3d.grad.v4f32.f32">;
1697 def int_nvvm_tex_unified_3d_v4s32_s32
1698   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1699               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1700               [], "llvm.nvvm.tex.unified.3d.v4s32.s32">;
1701 def int_nvvm_tex_unified_3d_v4s32_f32
1702   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1703               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1704                llvm_float_ty], [],
1705               "llvm.nvvm.tex.unified.3d.v4s32.f32">;
1706 def int_nvvm_tex_unified_3d_level_v4s32_f32
1707   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1708               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1709                llvm_float_ty, llvm_float_ty], [],
1710               "llvm.nvvm.tex.unified.3d.level.v4s32.f32">;
1711 def int_nvvm_tex_unified_3d_grad_v4s32_f32
1712   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1713               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1714                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1715                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1716               "llvm.nvvm.tex.unified.3d.grad.v4s32.f32">;
1717 def int_nvvm_tex_unified_3d_v4u32_s32
1718   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1719               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1720               [], "llvm.nvvm.tex.unified.3d.v4u32.s32">;
1721 def int_nvvm_tex_unified_3d_v4u32_f32
1722   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1723               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1724                llvm_float_ty], [],
1725               "llvm.nvvm.tex.unified.3d.v4u32.f32">;
1726 def int_nvvm_tex_unified_3d_level_v4u32_f32
1727   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1728               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1729                llvm_float_ty, llvm_float_ty], [],
1730               "llvm.nvvm.tex.unified.3d.level.v4u32.f32">;
1731 def int_nvvm_tex_unified_3d_grad_v4u32_f32
1732   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1733               [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1734                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1735                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1736               "llvm.nvvm.tex.unified.3d.grad.v4u32.f32">;
1737
1738 def int_nvvm_tex_unified_cube_v4f32_f32
1739   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1740               [llvm_i64_ty,
1741                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1742               "llvm.nvvm.tex.unified.cube.v4f32.f32">;
1743 def int_nvvm_tex_unified_cube_level_v4f32_f32
1744   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1745               [llvm_i64_ty,
1746                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1747               "llvm.nvvm.tex.unified.cube.level.v4f32.f32">;
1748 def int_nvvm_tex_unified_cube_v4s32_f32
1749   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1750               [llvm_i64_ty,
1751                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1752               "llvm.nvvm.tex.unified.cube.v4s32.f32">;
1753 def int_nvvm_tex_unified_cube_level_v4s32_f32
1754   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1755               [llvm_i64_ty,
1756                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1757               "llvm.nvvm.tex.unified.cube.level.v4s32.f32">;
1758 def int_nvvm_tex_unified_cube_v4u32_f32
1759   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1760               [llvm_i64_ty,
1761                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1762               "llvm.nvvm.tex.unified.cube.v4u32.f32">;
1763 def int_nvvm_tex_unified_cube_level_v4u32_f32
1764   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1765               [llvm_i64_ty,
1766                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1767               "llvm.nvvm.tex.unified.cube.level.v4u32.f32">;
1768
1769 def int_nvvm_tex_unified_cube_array_v4f32_f32
1770   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1771               [llvm_i64_ty, llvm_i32_ty,
1772                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1773               "llvm.nvvm.tex.unified.cube.array.v4f32.f32">;
1774 def int_nvvm_tex_unified_cube_array_level_v4f32_f32
1775   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1776               [llvm_i64_ty, llvm_i32_ty,
1777                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1778               "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32">;
1779 def int_nvvm_tex_unified_cube_array_v4s32_f32
1780   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1781               [llvm_i64_ty, llvm_i32_ty,
1782                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1783               "llvm.nvvm.tex.unified.cube.array.v4s32.f32">;
1784 def int_nvvm_tex_unified_cube_array_level_v4s32_f32
1785   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1786               [llvm_i64_ty, llvm_i32_ty,
1787                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1788               "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32">;
1789 def int_nvvm_tex_unified_cube_array_v4u32_f32
1790   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1791               [llvm_i64_ty, llvm_i32_ty,
1792                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1793               "llvm.nvvm.tex.unified.cube.array.v4u32.f32">;
1794 def int_nvvm_tex_unified_cube_array_level_v4u32_f32
1795   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1796               [llvm_i64_ty, llvm_i32_ty,
1797                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1798               "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32">;
1799
1800 def int_nvvm_tld4_unified_r_2d_v4f32_f32
1801   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1802               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1803               "llvm.nvvm.tld4.unified.r.2d.v4f32.f32">;
1804 def int_nvvm_tld4_unified_g_2d_v4f32_f32
1805   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1806               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1807               "llvm.nvvm.tld4.unified.g.2d.v4f32.f32">;
1808 def int_nvvm_tld4_unified_b_2d_v4f32_f32
1809   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1810               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1811               "llvm.nvvm.tld4.unified.b.2d.v4f32.f32">;
1812 def int_nvvm_tld4_unified_a_2d_v4f32_f32
1813   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1814               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1815               "llvm.nvvm.tld4.unified.a.2d.v4f32.f32">;
1816 def int_nvvm_tld4_unified_r_2d_v4s32_f32
1817   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1818               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1819               "llvm.nvvm.tld4.unified.r.2d.v4s32.f32">;
1820 def int_nvvm_tld4_unified_g_2d_v4s32_f32
1821   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1822               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1823               "llvm.nvvm.tld4.unified.g.2d.v4s32.f32">;
1824 def int_nvvm_tld4_unified_b_2d_v4s32_f32
1825   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1826               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1827               "llvm.nvvm.tld4.unified.b.2d.v4s32.f32">;
1828 def int_nvvm_tld4_unified_a_2d_v4s32_f32
1829   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1830               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1831               "llvm.nvvm.tld4.unified.a.2d.v4s32.f32">;
1832 def int_nvvm_tld4_unified_r_2d_v4u32_f32
1833   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1834               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1835               "llvm.nvvm.tld4.unified.r.2d.v4u32.f32">;
1836 def int_nvvm_tld4_unified_g_2d_v4u32_f32
1837   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1838               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1839               "llvm.nvvm.tld4.unified.g.2d.v4u32.f32">;
1840 def int_nvvm_tld4_unified_b_2d_v4u32_f32
1841   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1842               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1843               "llvm.nvvm.tld4.unified.b.2d.v4u32.f32">;
1844 def int_nvvm_tld4_unified_a_2d_v4u32_f32
1845   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1846               [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1847               "llvm.nvvm.tld4.unified.a.2d.v4u32.f32">;
1848
1849
1850 //=== Surface Load
1851 // .clamp variants
1852 def int_nvvm_suld_1d_i8_clamp
1853   : Intrinsic<[llvm_i16_ty],
1854               [llvm_i64_ty, llvm_i32_ty], [],
1855               "llvm.nvvm.suld.1d.i8.clamp">;
1856 def int_nvvm_suld_1d_i16_clamp
1857   : Intrinsic<[llvm_i16_ty],
1858               [llvm_i64_ty, llvm_i32_ty], [],
1859               "llvm.nvvm.suld.1d.i16.clamp">;
1860 def int_nvvm_suld_1d_i32_clamp
1861   : Intrinsic<[llvm_i32_ty],
1862               [llvm_i64_ty, llvm_i32_ty], [],
1863               "llvm.nvvm.suld.1d.i32.clamp">;
1864 def int_nvvm_suld_1d_i64_clamp
1865   : Intrinsic<[llvm_i64_ty],
1866               [llvm_i64_ty, llvm_i32_ty], [],
1867               "llvm.nvvm.suld.1d.i64.clamp">;
1868 def int_nvvm_suld_1d_v2i8_clamp
1869   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1870               [llvm_i64_ty, llvm_i32_ty], [],
1871               "llvm.nvvm.suld.1d.v2i8.clamp">;
1872 def int_nvvm_suld_1d_v2i16_clamp
1873   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1874               [llvm_i64_ty, llvm_i32_ty], [],
1875               "llvm.nvvm.suld.1d.v2i16.clamp">;
1876 def int_nvvm_suld_1d_v2i32_clamp
1877   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1878               [llvm_i64_ty, llvm_i32_ty], [],
1879               "llvm.nvvm.suld.1d.v2i32.clamp">;
1880 def int_nvvm_suld_1d_v2i64_clamp
1881   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1882               [llvm_i64_ty, llvm_i32_ty], [],
1883               "llvm.nvvm.suld.1d.v2i64.clamp">;
1884 def int_nvvm_suld_1d_v4i8_clamp
1885   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1886               [llvm_i64_ty, llvm_i32_ty], [],
1887               "llvm.nvvm.suld.1d.v4i8.clamp">;
1888 def int_nvvm_suld_1d_v4i16_clamp
1889   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1890               [llvm_i64_ty, llvm_i32_ty], [],
1891               "llvm.nvvm.suld.1d.v4i16.clamp">;
1892 def int_nvvm_suld_1d_v4i32_clamp
1893   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1894               [llvm_i64_ty, llvm_i32_ty], [],
1895               "llvm.nvvm.suld.1d.v4i32.clamp">;
1896
1897 def int_nvvm_suld_1d_array_i8_clamp
1898   : Intrinsic<[llvm_i16_ty],
1899               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1900               "llvm.nvvm.suld.1d.array.i8.clamp">;
1901 def int_nvvm_suld_1d_array_i16_clamp
1902   : Intrinsic<[llvm_i16_ty],
1903               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1904               "llvm.nvvm.suld.1d.array.i16.clamp">;
1905 def int_nvvm_suld_1d_array_i32_clamp
1906   : Intrinsic<[llvm_i32_ty],
1907               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1908               "llvm.nvvm.suld.1d.array.i32.clamp">;
1909 def int_nvvm_suld_1d_array_i64_clamp
1910   : Intrinsic<[llvm_i64_ty],
1911               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1912               "llvm.nvvm.suld.1d.array.i64.clamp">;
1913 def int_nvvm_suld_1d_array_v2i8_clamp
1914   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1915               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1916               "llvm.nvvm.suld.1d.array.v2i8.clamp">;
1917 def int_nvvm_suld_1d_array_v2i16_clamp
1918   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1919               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1920               "llvm.nvvm.suld.1d.array.v2i16.clamp">;
1921 def int_nvvm_suld_1d_array_v2i32_clamp
1922   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1923               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1924               "llvm.nvvm.suld.1d.array.v2i32.clamp">;
1925 def int_nvvm_suld_1d_array_v2i64_clamp
1926   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1927               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1928               "llvm.nvvm.suld.1d.array.v2i64.clamp">;
1929 def int_nvvm_suld_1d_array_v4i8_clamp
1930   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1931               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1932               "llvm.nvvm.suld.1d.array.v4i8.clamp">;
1933 def int_nvvm_suld_1d_array_v4i16_clamp
1934   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1935               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1936               "llvm.nvvm.suld.1d.array.v4i16.clamp">;
1937 def int_nvvm_suld_1d_array_v4i32_clamp
1938   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1939               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1940               "llvm.nvvm.suld.1d.array.v4i32.clamp">;
1941
1942 def int_nvvm_suld_2d_i8_clamp
1943   : Intrinsic<[llvm_i16_ty],
1944               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1945               "llvm.nvvm.suld.2d.i8.clamp">;
1946 def int_nvvm_suld_2d_i16_clamp
1947   : Intrinsic<[llvm_i16_ty],
1948               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1949               "llvm.nvvm.suld.2d.i16.clamp">;
1950 def int_nvvm_suld_2d_i32_clamp
1951   : Intrinsic<[llvm_i32_ty],
1952               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1953               "llvm.nvvm.suld.2d.i32.clamp">;
1954 def int_nvvm_suld_2d_i64_clamp
1955   : Intrinsic<[llvm_i64_ty],
1956               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1957               "llvm.nvvm.suld.2d.i64.clamp">;
1958 def int_nvvm_suld_2d_v2i8_clamp
1959   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1960               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1961               "llvm.nvvm.suld.2d.v2i8.clamp">;
1962 def int_nvvm_suld_2d_v2i16_clamp
1963   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1964               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1965               "llvm.nvvm.suld.2d.v2i16.clamp">;
1966 def int_nvvm_suld_2d_v2i32_clamp
1967   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1968               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1969               "llvm.nvvm.suld.2d.v2i32.clamp">;
1970 def int_nvvm_suld_2d_v2i64_clamp
1971   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
1972               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1973               "llvm.nvvm.suld.2d.v2i64.clamp">;
1974 def int_nvvm_suld_2d_v4i8_clamp
1975   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1976               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1977               "llvm.nvvm.suld.2d.v4i8.clamp">;
1978 def int_nvvm_suld_2d_v4i16_clamp
1979   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1980               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1981               "llvm.nvvm.suld.2d.v4i16.clamp">;
1982 def int_nvvm_suld_2d_v4i32_clamp
1983   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1984               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1985               "llvm.nvvm.suld.2d.v4i32.clamp">;
1986
1987 def int_nvvm_suld_2d_array_i8_clamp
1988   : Intrinsic<[llvm_i16_ty],
1989               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1990               "llvm.nvvm.suld.2d.array.i8.clamp">;
1991 def int_nvvm_suld_2d_array_i16_clamp
1992   : Intrinsic<[llvm_i16_ty],
1993               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1994               "llvm.nvvm.suld.2d.array.i16.clamp">;
1995 def int_nvvm_suld_2d_array_i32_clamp
1996   : Intrinsic<[llvm_i32_ty],
1997               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1998               "llvm.nvvm.suld.2d.array.i32.clamp">;
1999 def int_nvvm_suld_2d_array_i64_clamp
2000   : Intrinsic<[llvm_i64_ty],
2001               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2002               "llvm.nvvm.suld.2d.array.i64.clamp">;
2003 def int_nvvm_suld_2d_array_v2i8_clamp
2004   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2005               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2006               "llvm.nvvm.suld.2d.array.v2i8.clamp">;
2007 def int_nvvm_suld_2d_array_v2i16_clamp
2008   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2009               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2010               "llvm.nvvm.suld.2d.array.v2i16.clamp">;
2011 def int_nvvm_suld_2d_array_v2i32_clamp
2012   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2013               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2014               "llvm.nvvm.suld.2d.array.v2i32.clamp">;
2015 def int_nvvm_suld_2d_array_v2i64_clamp
2016   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2017               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2018               "llvm.nvvm.suld.2d.array.v2i64.clamp">;
2019 def int_nvvm_suld_2d_array_v4i8_clamp
2020   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2021               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2022               "llvm.nvvm.suld.2d.array.v4i8.clamp">;
2023 def int_nvvm_suld_2d_array_v4i16_clamp
2024   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2025               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2026               "llvm.nvvm.suld.2d.array.v4i16.clamp">;
2027 def int_nvvm_suld_2d_array_v4i32_clamp
2028   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2029               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2030               "llvm.nvvm.suld.2d.array.v4i32.clamp">;
2031
2032 def int_nvvm_suld_3d_i8_clamp
2033   : Intrinsic<[llvm_i16_ty],
2034               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2035               "llvm.nvvm.suld.3d.i8.clamp">;
2036 def int_nvvm_suld_3d_i16_clamp
2037   : Intrinsic<[llvm_i16_ty],
2038               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2039               "llvm.nvvm.suld.3d.i16.clamp">;
2040 def int_nvvm_suld_3d_i32_clamp
2041   : Intrinsic<[llvm_i32_ty],
2042               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2043               "llvm.nvvm.suld.3d.i32.clamp">;
2044 def int_nvvm_suld_3d_i64_clamp
2045   : Intrinsic<[llvm_i64_ty],
2046               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2047               "llvm.nvvm.suld.3d.i64.clamp">;
2048 def int_nvvm_suld_3d_v2i8_clamp
2049   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2050               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2051               "llvm.nvvm.suld.3d.v2i8.clamp">;
2052 def int_nvvm_suld_3d_v2i16_clamp
2053   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2054               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2055               "llvm.nvvm.suld.3d.v2i16.clamp">;
2056 def int_nvvm_suld_3d_v2i32_clamp
2057   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2058               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2059               "llvm.nvvm.suld.3d.v2i32.clamp">;
2060 def int_nvvm_suld_3d_v2i64_clamp
2061   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2062               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2063               "llvm.nvvm.suld.3d.v2i64.clamp">;
2064 def int_nvvm_suld_3d_v4i8_clamp
2065   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2066               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2067               "llvm.nvvm.suld.3d.v4i8.clamp">;
2068 def int_nvvm_suld_3d_v4i16_clamp
2069   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2070               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2071               "llvm.nvvm.suld.3d.v4i16.clamp">;
2072 def int_nvvm_suld_3d_v4i32_clamp
2073   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2074               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2075               "llvm.nvvm.suld.3d.v4i32.clamp">;
2076
2077 // .trap variants
2078 def int_nvvm_suld_1d_i8_trap
2079   : Intrinsic<[llvm_i16_ty],
2080               [llvm_i64_ty, llvm_i32_ty], [],
2081               "llvm.nvvm.suld.1d.i8.trap">;
2082 def int_nvvm_suld_1d_i16_trap
2083   : Intrinsic<[llvm_i16_ty],
2084               [llvm_i64_ty, llvm_i32_ty], [],
2085               "llvm.nvvm.suld.1d.i16.trap">;
2086 def int_nvvm_suld_1d_i32_trap
2087   : Intrinsic<[llvm_i32_ty],
2088               [llvm_i64_ty, llvm_i32_ty], [],
2089               "llvm.nvvm.suld.1d.i32.trap">;
2090 def int_nvvm_suld_1d_i64_trap
2091   : Intrinsic<[llvm_i64_ty],
2092               [llvm_i64_ty, llvm_i32_ty], [],
2093               "llvm.nvvm.suld.1d.i64.trap">;
2094 def int_nvvm_suld_1d_v2i8_trap
2095   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2096               [llvm_i64_ty, llvm_i32_ty], [],
2097               "llvm.nvvm.suld.1d.v2i8.trap">;
2098 def int_nvvm_suld_1d_v2i16_trap
2099   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2100               [llvm_i64_ty, llvm_i32_ty], [],
2101               "llvm.nvvm.suld.1d.v2i16.trap">;
2102 def int_nvvm_suld_1d_v2i32_trap
2103   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2104               [llvm_i64_ty, llvm_i32_ty], [],
2105               "llvm.nvvm.suld.1d.v2i32.trap">;
2106 def int_nvvm_suld_1d_v2i64_trap
2107   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2108               [llvm_i64_ty, llvm_i32_ty], [],
2109               "llvm.nvvm.suld.1d.v2i64.trap">;
2110 def int_nvvm_suld_1d_v4i8_trap
2111   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2112               [llvm_i64_ty, llvm_i32_ty], [],
2113               "llvm.nvvm.suld.1d.v4i8.trap">;
2114 def int_nvvm_suld_1d_v4i16_trap
2115   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2116               [llvm_i64_ty, llvm_i32_ty], [],
2117               "llvm.nvvm.suld.1d.v4i16.trap">;
2118 def int_nvvm_suld_1d_v4i32_trap
2119   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2120               [llvm_i64_ty, llvm_i32_ty], [],
2121               "llvm.nvvm.suld.1d.v4i32.trap">;
2122
2123 def int_nvvm_suld_1d_array_i8_trap
2124   : Intrinsic<[llvm_i16_ty],
2125               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2126               "llvm.nvvm.suld.1d.array.i8.trap">;
2127 def int_nvvm_suld_1d_array_i16_trap
2128   : Intrinsic<[llvm_i16_ty],
2129               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2130               "llvm.nvvm.suld.1d.array.i16.trap">;
2131 def int_nvvm_suld_1d_array_i32_trap
2132   : Intrinsic<[llvm_i32_ty],
2133               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2134               "llvm.nvvm.suld.1d.array.i32.trap">;
2135 def int_nvvm_suld_1d_array_i64_trap
2136   : Intrinsic<[llvm_i64_ty],
2137               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2138               "llvm.nvvm.suld.1d.array.i64.trap">;
2139 def int_nvvm_suld_1d_array_v2i8_trap
2140   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2141               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2142               "llvm.nvvm.suld.1d.array.v2i8.trap">;
2143 def int_nvvm_suld_1d_array_v2i16_trap
2144   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2145               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2146               "llvm.nvvm.suld.1d.array.v2i16.trap">;
2147 def int_nvvm_suld_1d_array_v2i32_trap
2148   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2149               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2150               "llvm.nvvm.suld.1d.array.v2i32.trap">;
2151 def int_nvvm_suld_1d_array_v2i64_trap
2152   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2153               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2154               "llvm.nvvm.suld.1d.array.v2i64.trap">;
2155 def int_nvvm_suld_1d_array_v4i8_trap
2156   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2157               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2158               "llvm.nvvm.suld.1d.array.v4i8.trap">;
2159 def int_nvvm_suld_1d_array_v4i16_trap
2160   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2161               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2162               "llvm.nvvm.suld.1d.array.v4i16.trap">;
2163 def int_nvvm_suld_1d_array_v4i32_trap
2164   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2165               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2166               "llvm.nvvm.suld.1d.array.v4i32.trap">;
2167
2168 def int_nvvm_suld_2d_i8_trap
2169   : Intrinsic<[llvm_i16_ty],
2170               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2171               "llvm.nvvm.suld.2d.i8.trap">;
2172 def int_nvvm_suld_2d_i16_trap
2173   : Intrinsic<[llvm_i16_ty],
2174               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2175               "llvm.nvvm.suld.2d.i16.trap">;
2176 def int_nvvm_suld_2d_i32_trap
2177   : Intrinsic<[llvm_i32_ty],
2178               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2179               "llvm.nvvm.suld.2d.i32.trap">;
2180 def int_nvvm_suld_2d_i64_trap
2181   : Intrinsic<[llvm_i64_ty],
2182               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2183               "llvm.nvvm.suld.2d.i64.trap">;
2184 def int_nvvm_suld_2d_v2i8_trap
2185   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2186               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2187               "llvm.nvvm.suld.2d.v2i8.trap">;
2188 def int_nvvm_suld_2d_v2i16_trap
2189   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2190               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2191               "llvm.nvvm.suld.2d.v2i16.trap">;
2192 def int_nvvm_suld_2d_v2i32_trap
2193   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2194               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2195               "llvm.nvvm.suld.2d.v2i32.trap">;
2196 def int_nvvm_suld_2d_v2i64_trap
2197   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2198               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2199               "llvm.nvvm.suld.2d.v2i64.trap">;
2200 def int_nvvm_suld_2d_v4i8_trap
2201   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2202               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2203               "llvm.nvvm.suld.2d.v4i8.trap">;
2204 def int_nvvm_suld_2d_v4i16_trap
2205   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2206               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2207               "llvm.nvvm.suld.2d.v4i16.trap">;
2208 def int_nvvm_suld_2d_v4i32_trap
2209   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2210               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2211               "llvm.nvvm.suld.2d.v4i32.trap">;
2212
2213 def int_nvvm_suld_2d_array_i8_trap
2214   : Intrinsic<[llvm_i16_ty],
2215               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2216               "llvm.nvvm.suld.2d.array.i8.trap">;
2217 def int_nvvm_suld_2d_array_i16_trap
2218   : Intrinsic<[llvm_i16_ty],
2219               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2220               "llvm.nvvm.suld.2d.array.i16.trap">;
2221 def int_nvvm_suld_2d_array_i32_trap
2222   : Intrinsic<[llvm_i32_ty],
2223               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2224               "llvm.nvvm.suld.2d.array.i32.trap">;
2225 def int_nvvm_suld_2d_array_i64_trap
2226   : Intrinsic<[llvm_i64_ty],
2227               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2228               "llvm.nvvm.suld.2d.array.i64.trap">;
2229 def int_nvvm_suld_2d_array_v2i8_trap
2230   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2231               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2232               "llvm.nvvm.suld.2d.array.v2i8.trap">;
2233 def int_nvvm_suld_2d_array_v2i16_trap
2234   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2235               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2236               "llvm.nvvm.suld.2d.array.v2i16.trap">;
2237 def int_nvvm_suld_2d_array_v2i32_trap
2238   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2239               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2240               "llvm.nvvm.suld.2d.array.v2i32.trap">;
2241 def int_nvvm_suld_2d_array_v2i64_trap
2242   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2243               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2244               "llvm.nvvm.suld.2d.array.v2i64.trap">;
2245 def int_nvvm_suld_2d_array_v4i8_trap
2246   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2247               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2248               "llvm.nvvm.suld.2d.array.v4i8.trap">;
2249 def int_nvvm_suld_2d_array_v4i16_trap
2250   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2251               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2252               "llvm.nvvm.suld.2d.array.v4i16.trap">;
2253 def int_nvvm_suld_2d_array_v4i32_trap
2254   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2255               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2256               "llvm.nvvm.suld.2d.array.v4i32.trap">;
2257
2258 def int_nvvm_suld_3d_i8_trap
2259   : Intrinsic<[llvm_i16_ty],
2260               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2261               "llvm.nvvm.suld.3d.i8.trap">;
2262 def int_nvvm_suld_3d_i16_trap
2263   : Intrinsic<[llvm_i16_ty],
2264               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2265               "llvm.nvvm.suld.3d.i16.trap">;
2266 def int_nvvm_suld_3d_i32_trap
2267   : Intrinsic<[llvm_i32_ty],
2268               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2269               "llvm.nvvm.suld.3d.i32.trap">;
2270 def int_nvvm_suld_3d_i64_trap
2271   : Intrinsic<[llvm_i64_ty],
2272               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2273               "llvm.nvvm.suld.3d.i64.trap">;
2274 def int_nvvm_suld_3d_v2i8_trap
2275   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2276               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2277               "llvm.nvvm.suld.3d.v2i8.trap">;
2278 def int_nvvm_suld_3d_v2i16_trap
2279   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2280               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2281               "llvm.nvvm.suld.3d.v2i16.trap">;
2282 def int_nvvm_suld_3d_v2i32_trap
2283   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2284               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2285               "llvm.nvvm.suld.3d.v2i32.trap">;
2286 def int_nvvm_suld_3d_v2i64_trap
2287   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2288               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2289               "llvm.nvvm.suld.3d.v2i64.trap">;
2290 def int_nvvm_suld_3d_v4i8_trap
2291   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2292               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2293               "llvm.nvvm.suld.3d.v4i8.trap">;
2294 def int_nvvm_suld_3d_v4i16_trap
2295   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2296               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2297               "llvm.nvvm.suld.3d.v4i16.trap">;
2298 def int_nvvm_suld_3d_v4i32_trap
2299   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2300               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2301               "llvm.nvvm.suld.3d.v4i32.trap">;
2302
2303 // .zero variants
2304 def int_nvvm_suld_1d_i8_zero
2305   : Intrinsic<[llvm_i16_ty],
2306               [llvm_i64_ty, llvm_i32_ty], [],
2307               "llvm.nvvm.suld.1d.i8.zero">;
2308 def int_nvvm_suld_1d_i16_zero
2309   : Intrinsic<[llvm_i16_ty],
2310               [llvm_i64_ty, llvm_i32_ty], [],
2311               "llvm.nvvm.suld.1d.i16.zero">;
2312 def int_nvvm_suld_1d_i32_zero
2313   : Intrinsic<[llvm_i32_ty],
2314               [llvm_i64_ty, llvm_i32_ty], [],
2315               "llvm.nvvm.suld.1d.i32.zero">;
2316 def int_nvvm_suld_1d_i64_zero
2317   : Intrinsic<[llvm_i64_ty],
2318               [llvm_i64_ty, llvm_i32_ty], [],
2319               "llvm.nvvm.suld.1d.i64.zero">;
2320 def int_nvvm_suld_1d_v2i8_zero
2321   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2322               [llvm_i64_ty, llvm_i32_ty], [],
2323               "llvm.nvvm.suld.1d.v2i8.zero">;
2324 def int_nvvm_suld_1d_v2i16_zero
2325   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2326               [llvm_i64_ty, llvm_i32_ty], [],
2327               "llvm.nvvm.suld.1d.v2i16.zero">;
2328 def int_nvvm_suld_1d_v2i32_zero
2329   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2330               [llvm_i64_ty, llvm_i32_ty], [],
2331               "llvm.nvvm.suld.1d.v2i32.zero">;
2332 def int_nvvm_suld_1d_v2i64_zero
2333   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2334               [llvm_i64_ty, llvm_i32_ty], [],
2335               "llvm.nvvm.suld.1d.v2i64.zero">;
2336 def int_nvvm_suld_1d_v4i8_zero
2337   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2338               [llvm_i64_ty, llvm_i32_ty], [],
2339               "llvm.nvvm.suld.1d.v4i8.zero">;
2340 def int_nvvm_suld_1d_v4i16_zero
2341   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2342               [llvm_i64_ty, llvm_i32_ty], [],
2343               "llvm.nvvm.suld.1d.v4i16.zero">;
2344 def int_nvvm_suld_1d_v4i32_zero
2345   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2346               [llvm_i64_ty, llvm_i32_ty], [],
2347               "llvm.nvvm.suld.1d.v4i32.zero">;
2348
2349 def int_nvvm_suld_1d_array_i8_zero
2350   : Intrinsic<[llvm_i16_ty],
2351               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2352               "llvm.nvvm.suld.1d.array.i8.zero">;
2353 def int_nvvm_suld_1d_array_i16_zero
2354   : Intrinsic<[llvm_i16_ty],
2355               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2356               "llvm.nvvm.suld.1d.array.i16.zero">;
2357 def int_nvvm_suld_1d_array_i32_zero
2358   : Intrinsic<[llvm_i32_ty],
2359               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2360               "llvm.nvvm.suld.1d.array.i32.zero">;
2361 def int_nvvm_suld_1d_array_i64_zero
2362   : Intrinsic<[llvm_i64_ty],
2363               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2364               "llvm.nvvm.suld.1d.array.i64.zero">;
2365 def int_nvvm_suld_1d_array_v2i8_zero
2366   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2367               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2368               "llvm.nvvm.suld.1d.array.v2i8.zero">;
2369 def int_nvvm_suld_1d_array_v2i16_zero
2370   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2371               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2372               "llvm.nvvm.suld.1d.array.v2i16.zero">;
2373 def int_nvvm_suld_1d_array_v2i32_zero
2374   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2375               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2376               "llvm.nvvm.suld.1d.array.v2i32.zero">;
2377 def int_nvvm_suld_1d_array_v2i64_zero
2378   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2379               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2380               "llvm.nvvm.suld.1d.array.v2i64.zero">;
2381 def int_nvvm_suld_1d_array_v4i8_zero
2382   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2383               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2384               "llvm.nvvm.suld.1d.array.v4i8.zero">;
2385 def int_nvvm_suld_1d_array_v4i16_zero
2386   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2387               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2388               "llvm.nvvm.suld.1d.array.v4i16.zero">;
2389 def int_nvvm_suld_1d_array_v4i32_zero
2390   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2391               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2392               "llvm.nvvm.suld.1d.array.v4i32.zero">;
2393
2394 def int_nvvm_suld_2d_i8_zero
2395   : Intrinsic<[llvm_i16_ty],
2396               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2397               "llvm.nvvm.suld.2d.i8.zero">;
2398 def int_nvvm_suld_2d_i16_zero
2399   : Intrinsic<[llvm_i16_ty],
2400               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2401               "llvm.nvvm.suld.2d.i16.zero">;
2402 def int_nvvm_suld_2d_i32_zero
2403   : Intrinsic<[llvm_i32_ty],
2404               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2405               "llvm.nvvm.suld.2d.i32.zero">;
2406 def int_nvvm_suld_2d_i64_zero
2407   : Intrinsic<[llvm_i64_ty],
2408               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2409               "llvm.nvvm.suld.2d.i64.zero">;
2410 def int_nvvm_suld_2d_v2i8_zero
2411   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2412               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2413               "llvm.nvvm.suld.2d.v2i8.zero">;
2414 def int_nvvm_suld_2d_v2i16_zero
2415   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2416               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2417               "llvm.nvvm.suld.2d.v2i16.zero">;
2418 def int_nvvm_suld_2d_v2i32_zero
2419   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2420               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2421               "llvm.nvvm.suld.2d.v2i32.zero">;
2422 def int_nvvm_suld_2d_v2i64_zero
2423   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2424               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2425               "llvm.nvvm.suld.2d.v2i64.zero">;
2426 def int_nvvm_suld_2d_v4i8_zero
2427   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2428               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2429               "llvm.nvvm.suld.2d.v4i8.zero">;
2430 def int_nvvm_suld_2d_v4i16_zero
2431   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2432               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2433               "llvm.nvvm.suld.2d.v4i16.zero">;
2434 def int_nvvm_suld_2d_v4i32_zero
2435   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2436               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2437               "llvm.nvvm.suld.2d.v4i32.zero">;
2438
2439 def int_nvvm_suld_2d_array_i8_zero
2440   : Intrinsic<[llvm_i16_ty],
2441               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2442               "llvm.nvvm.suld.2d.array.i8.zero">;
2443 def int_nvvm_suld_2d_array_i16_zero
2444   : Intrinsic<[llvm_i16_ty],
2445               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2446               "llvm.nvvm.suld.2d.array.i16.zero">;
2447 def int_nvvm_suld_2d_array_i32_zero
2448   : Intrinsic<[llvm_i32_ty],
2449               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2450               "llvm.nvvm.suld.2d.array.i32.zero">;
2451 def int_nvvm_suld_2d_array_i64_zero
2452   : Intrinsic<[llvm_i64_ty],
2453               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2454               "llvm.nvvm.suld.2d.array.i64.zero">;
2455 def int_nvvm_suld_2d_array_v2i8_zero
2456   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2457               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2458               "llvm.nvvm.suld.2d.array.v2i8.zero">;
2459 def int_nvvm_suld_2d_array_v2i16_zero
2460   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2461               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2462               "llvm.nvvm.suld.2d.array.v2i16.zero">;
2463 def int_nvvm_suld_2d_array_v2i32_zero
2464   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2465               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2466               "llvm.nvvm.suld.2d.array.v2i32.zero">;
2467 def int_nvvm_suld_2d_array_v2i64_zero
2468   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2469               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2470               "llvm.nvvm.suld.2d.array.v2i64.zero">;
2471 def int_nvvm_suld_2d_array_v4i8_zero
2472   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2473               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2474               "llvm.nvvm.suld.2d.array.v4i8.zero">;
2475 def int_nvvm_suld_2d_array_v4i16_zero
2476   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2477               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2478               "llvm.nvvm.suld.2d.array.v4i16.zero">;
2479 def int_nvvm_suld_2d_array_v4i32_zero
2480   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2481               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2482               "llvm.nvvm.suld.2d.array.v4i32.zero">;
2483
2484 def int_nvvm_suld_3d_i8_zero
2485   : Intrinsic<[llvm_i16_ty],
2486               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2487               "llvm.nvvm.suld.3d.i8.zero">;
2488 def int_nvvm_suld_3d_i16_zero
2489   : Intrinsic<[llvm_i16_ty],
2490               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2491               "llvm.nvvm.suld.3d.i16.zero">;
2492 def int_nvvm_suld_3d_i32_zero
2493   : Intrinsic<[llvm_i32_ty],
2494               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2495               "llvm.nvvm.suld.3d.i32.zero">;
2496 def int_nvvm_suld_3d_i64_zero
2497   : Intrinsic<[llvm_i64_ty],
2498               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2499               "llvm.nvvm.suld.3d.i64.zero">;
2500 def int_nvvm_suld_3d_v2i8_zero
2501   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2502               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2503               "llvm.nvvm.suld.3d.v2i8.zero">;
2504 def int_nvvm_suld_3d_v2i16_zero
2505   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2506               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2507               "llvm.nvvm.suld.3d.v2i16.zero">;
2508 def int_nvvm_suld_3d_v2i32_zero
2509   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2510               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2511               "llvm.nvvm.suld.3d.v2i32.zero">;
2512 def int_nvvm_suld_3d_v2i64_zero
2513   : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2514               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2515               "llvm.nvvm.suld.3d.v2i64.zero">;
2516 def int_nvvm_suld_3d_v4i8_zero
2517   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2518               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2519               "llvm.nvvm.suld.3d.v4i8.zero">;
2520 def int_nvvm_suld_3d_v4i16_zero
2521   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2522               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2523               "llvm.nvvm.suld.3d.v4i16.zero">;
2524 def int_nvvm_suld_3d_v4i32_zero
2525   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2526               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2527               "llvm.nvvm.suld.3d.v4i32.zero">;
2528
2529 //===- Texture Query ------------------------------------------------------===//
2530
2531 def int_nvvm_txq_channel_order
2532   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2533               "llvm.nvvm.txq.channel.order">,
2534     GCCBuiltin<"__nvvm_txq_channel_order">;
2535 def int_nvvm_txq_channel_data_type
2536   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2537               "llvm.nvvm.txq.channel.data.type">,
2538     GCCBuiltin<"__nvvm_txq_channel_data_type">;
2539 def int_nvvm_txq_width
2540   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2541               "llvm.nvvm.txq.width">,
2542     GCCBuiltin<"__nvvm_txq_width">;
2543 def int_nvvm_txq_height
2544   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2545               "llvm.nvvm.txq.height">,
2546     GCCBuiltin<"__nvvm_txq_height">;
2547 def int_nvvm_txq_depth
2548   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2549               "llvm.nvvm.txq.depth">,
2550     GCCBuiltin<"__nvvm_txq_depth">;
2551 def int_nvvm_txq_array_size
2552   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2553               "llvm.nvvm.txq.array.size">,
2554     GCCBuiltin<"__nvvm_txq_array_size">;
2555 def int_nvvm_txq_num_samples
2556   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2557               "llvm.nvvm.txq.num.samples">,
2558     GCCBuiltin<"__nvvm_txq_num_samples">;
2559 def int_nvvm_txq_num_mipmap_levels
2560   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2561               "llvm.nvvm.txq.num.mipmap.levels">,
2562     GCCBuiltin<"__nvvm_txq_num_mipmap_levels">;
2563
2564 //===- Surface Query ------------------------------------------------------===//
2565
2566 def int_nvvm_suq_channel_order
2567   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2568               "llvm.nvvm.suq.channel.order">,
2569     GCCBuiltin<"__nvvm_suq_channel_order">;
2570 def int_nvvm_suq_channel_data_type
2571   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2572               "llvm.nvvm.suq.channel.data.type">,
2573     GCCBuiltin<"__nvvm_suq_channel_data_type">;
2574 def int_nvvm_suq_width
2575   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2576               "llvm.nvvm.suq.width">,
2577     GCCBuiltin<"__nvvm_suq_width">;
2578 def int_nvvm_suq_height
2579   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2580               "llvm.nvvm.suq.height">,
2581     GCCBuiltin<"__nvvm_suq_height">;
2582 def int_nvvm_suq_depth
2583   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2584               "llvm.nvvm.suq.depth">,
2585     GCCBuiltin<"__nvvm_suq_depth">;
2586 def int_nvvm_suq_array_size
2587   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
2588               "llvm.nvvm.suq.array.size">,
2589     GCCBuiltin<"__nvvm_suq_array_size">;
2590
2591
2592 //===- Handle Query -------------------------------------------------------===//
2593
2594 def int_nvvm_istypep_sampler
2595   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2596               "llvm.nvvm.istypep.sampler">,
2597     GCCBuiltin<"__nvvm_istypep_sampler">;
2598 def int_nvvm_istypep_surface
2599   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2600               "llvm.nvvm.istypep.surface">,
2601     GCCBuiltin<"__nvvm_istypep_surface">;
2602 def int_nvvm_istypep_texture
2603   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
2604               "llvm.nvvm.istypep.texture">,
2605     GCCBuiltin<"__nvvm_istypep_texture">;
2606
2607
2608
2609 //===- Surface Stores -----------------------------------------------------===//
2610
2611 // Unformatted
2612 // .clamp variant
2613 def int_nvvm_sust_b_1d_i8_clamp
2614   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2615               "llvm.nvvm.sust.b.1d.i8.clamp">,
2616     GCCBuiltin<"__nvvm_sust_b_1d_i8_clamp">;
2617 def int_nvvm_sust_b_1d_i16_clamp
2618   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2619               "llvm.nvvm.sust.b.1d.i16.clamp">,
2620     GCCBuiltin<"__nvvm_sust_b_1d_i16_clamp">;
2621 def int_nvvm_sust_b_1d_i32_clamp
2622   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2623               "llvm.nvvm.sust.b.1d.i32.clamp">,
2624     GCCBuiltin<"__nvvm_sust_b_1d_i32_clamp">;
2625 def int_nvvm_sust_b_1d_i64_clamp
2626   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
2627               "llvm.nvvm.sust.b.1d.i64.clamp">,
2628     GCCBuiltin<"__nvvm_sust_b_1d_i64_clamp">;
2629 def int_nvvm_sust_b_1d_v2i8_clamp
2630   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2631               "llvm.nvvm.sust.b.1d.v2i8.clamp">,
2632     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_clamp">;
2633 def int_nvvm_sust_b_1d_v2i16_clamp
2634   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2635               "llvm.nvvm.sust.b.1d.v2i16.clamp">,
2636     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_clamp">;
2637 def int_nvvm_sust_b_1d_v2i32_clamp
2638   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2639               "llvm.nvvm.sust.b.1d.v2i32.clamp">,
2640     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_clamp">;
2641 def int_nvvm_sust_b_1d_v2i64_clamp
2642   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
2643               "llvm.nvvm.sust.b.1d.v2i64.clamp">,
2644     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_clamp">;
2645 def int_nvvm_sust_b_1d_v4i8_clamp
2646   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2647                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2648               "llvm.nvvm.sust.b.1d.v4i8.clamp">,
2649     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_clamp">;
2650 def int_nvvm_sust_b_1d_v4i16_clamp
2651   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2652                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2653               "llvm.nvvm.sust.b.1d.v4i16.clamp">,
2654     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_clamp">;
2655 def int_nvvm_sust_b_1d_v4i32_clamp
2656   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2657                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2658               "llvm.nvvm.sust.b.1d.v4i32.clamp">,
2659     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_clamp">;
2660
2661
2662 def int_nvvm_sust_b_1d_array_i8_clamp
2663   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2664               "llvm.nvvm.sust.b.1d.array.i8.clamp">,
2665     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_clamp">;
2666 def int_nvvm_sust_b_1d_array_i16_clamp
2667   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2668               "llvm.nvvm.sust.b.1d.array.i16.clamp">,
2669     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_clamp">;
2670 def int_nvvm_sust_b_1d_array_i32_clamp
2671   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2672               "llvm.nvvm.sust.b.1d.array.i32.clamp">,
2673     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_clamp">;
2674 def int_nvvm_sust_b_1d_array_i64_clamp
2675   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2676               "llvm.nvvm.sust.b.1d.array.i64.clamp">,
2677     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_clamp">;
2678 def int_nvvm_sust_b_1d_array_v2i8_clamp
2679   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2680                    llvm_i16_ty, llvm_i16_ty], [],
2681               "llvm.nvvm.sust.b.1d.array.v2i8.clamp">,
2682     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_clamp">;
2683 def int_nvvm_sust_b_1d_array_v2i16_clamp
2684   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2685                    llvm_i16_ty, llvm_i16_ty], [],
2686               "llvm.nvvm.sust.b.1d.array.v2i16.clamp">,
2687     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_clamp">;
2688 def int_nvvm_sust_b_1d_array_v2i32_clamp
2689   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2690                    llvm_i32_ty, llvm_i32_ty], [],
2691               "llvm.nvvm.sust.b.1d.array.v2i32.clamp">,
2692     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_clamp">;
2693 def int_nvvm_sust_b_1d_array_v2i64_clamp
2694   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2695                    llvm_i64_ty, llvm_i64_ty], [],
2696               "llvm.nvvm.sust.b.1d.array.v2i64.clamp">,
2697     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_clamp">;
2698 def int_nvvm_sust_b_1d_array_v4i8_clamp
2699   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2700                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2701               "llvm.nvvm.sust.b.1d.array.v4i8.clamp">,
2702     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_clamp">;
2703 def int_nvvm_sust_b_1d_array_v4i16_clamp
2704   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2705                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2706               "llvm.nvvm.sust.b.1d.array.v4i16.clamp">,
2707     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_clamp">;
2708 def int_nvvm_sust_b_1d_array_v4i32_clamp
2709   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2710                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2711               "llvm.nvvm.sust.b.1d.array.v4i32.clamp">,
2712     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_clamp">;
2713
2714
2715 def int_nvvm_sust_b_2d_i8_clamp
2716   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2717               "llvm.nvvm.sust.b.2d.i8.clamp">,
2718     GCCBuiltin<"__nvvm_sust_b_2d_i8_clamp">;
2719 def int_nvvm_sust_b_2d_i16_clamp
2720   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2721               "llvm.nvvm.sust.b.2d.i16.clamp">,
2722     GCCBuiltin<"__nvvm_sust_b_2d_i16_clamp">;
2723 def int_nvvm_sust_b_2d_i32_clamp
2724   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2725               "llvm.nvvm.sust.b.2d.i32.clamp">,
2726     GCCBuiltin<"__nvvm_sust_b_2d_i32_clamp">;
2727 def int_nvvm_sust_b_2d_i64_clamp
2728   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2729               "llvm.nvvm.sust.b.2d.i64.clamp">,
2730     GCCBuiltin<"__nvvm_sust_b_2d_i64_clamp">;
2731 def int_nvvm_sust_b_2d_v2i8_clamp
2732   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2733                    llvm_i16_ty, llvm_i16_ty], [],
2734               "llvm.nvvm.sust.b.2d.v2i8.clamp">,
2735     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_clamp">;
2736 def int_nvvm_sust_b_2d_v2i16_clamp
2737   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2738                    llvm_i16_ty, llvm_i16_ty], [],
2739               "llvm.nvvm.sust.b.2d.v2i16.clamp">,
2740     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_clamp">;
2741 def int_nvvm_sust_b_2d_v2i32_clamp
2742   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2743                    llvm_i32_ty, llvm_i32_ty], [],
2744               "llvm.nvvm.sust.b.2d.v2i32.clamp">,
2745     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_clamp">;
2746 def int_nvvm_sust_b_2d_v2i64_clamp
2747   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2748                    llvm_i64_ty, llvm_i64_ty], [],
2749               "llvm.nvvm.sust.b.2d.v2i64.clamp">,
2750     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_clamp">;
2751 def int_nvvm_sust_b_2d_v4i8_clamp
2752   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2753                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2754               "llvm.nvvm.sust.b.2d.v4i8.clamp">,
2755     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_clamp">;
2756 def int_nvvm_sust_b_2d_v4i16_clamp
2757   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2758                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2759               "llvm.nvvm.sust.b.2d.v4i16.clamp">,
2760     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_clamp">;
2761 def int_nvvm_sust_b_2d_v4i32_clamp
2762   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2763                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2764               "llvm.nvvm.sust.b.2d.v4i32.clamp">,
2765     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_clamp">;
2766
2767
2768 def int_nvvm_sust_b_2d_array_i8_clamp
2769   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2770                    llvm_i32_ty, llvm_i16_ty], [],
2771               "llvm.nvvm.sust.b.2d.array.i8.clamp">,
2772     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_clamp">;
2773 def int_nvvm_sust_b_2d_array_i16_clamp
2774   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2775                    llvm_i32_ty, llvm_i16_ty], [],
2776               "llvm.nvvm.sust.b.2d.array.i16.clamp">,
2777     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_clamp">;
2778 def int_nvvm_sust_b_2d_array_i32_clamp
2779   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2780                    llvm_i32_ty, llvm_i32_ty], [],
2781               "llvm.nvvm.sust.b.2d.array.i32.clamp">,
2782     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_clamp">;
2783 def int_nvvm_sust_b_2d_array_i64_clamp
2784   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2785                    llvm_i32_ty, llvm_i64_ty], [],
2786               "llvm.nvvm.sust.b.2d.array.i64.clamp">,
2787     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_clamp">;
2788 def int_nvvm_sust_b_2d_array_v2i8_clamp
2789   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2790                    llvm_i16_ty, llvm_i16_ty], [],
2791               "llvm.nvvm.sust.b.2d.array.v2i8.clamp">,
2792     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_clamp">;
2793 def int_nvvm_sust_b_2d_array_v2i16_clamp
2794   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2795                    llvm_i16_ty, llvm_i16_ty], [],
2796               "llvm.nvvm.sust.b.2d.array.v2i16.clamp">,
2797     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_clamp">;
2798 def int_nvvm_sust_b_2d_array_v2i32_clamp
2799   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2800                    llvm_i32_ty, llvm_i32_ty], [],
2801               "llvm.nvvm.sust.b.2d.array.v2i32.clamp">,
2802     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_clamp">;
2803 def int_nvvm_sust_b_2d_array_v2i64_clamp
2804   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2805                    llvm_i64_ty, llvm_i64_ty], [],
2806               "llvm.nvvm.sust.b.2d.array.v2i64.clamp">,
2807     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_clamp">;
2808 def int_nvvm_sust_b_2d_array_v4i8_clamp
2809   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2810                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2811               "llvm.nvvm.sust.b.2d.array.v4i8.clamp">,
2812     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_clamp">;
2813 def int_nvvm_sust_b_2d_array_v4i16_clamp
2814   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2815                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2816               "llvm.nvvm.sust.b.2d.array.v4i16.clamp">,
2817     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_clamp">;
2818 def int_nvvm_sust_b_2d_array_v4i32_clamp
2819   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2820                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2821               "llvm.nvvm.sust.b.2d.array.v4i32.clamp">,
2822     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_clamp">;
2823
2824
2825 def int_nvvm_sust_b_3d_i8_clamp
2826   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2827                    llvm_i32_ty, llvm_i16_ty], [],
2828               "llvm.nvvm.sust.b.3d.i8.clamp">,
2829     GCCBuiltin<"__nvvm_sust_b_3d_i8_clamp">;
2830 def int_nvvm_sust_b_3d_i16_clamp
2831   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2832                    llvm_i32_ty, llvm_i16_ty], [],
2833               "llvm.nvvm.sust.b.3d.i16.clamp">,
2834     GCCBuiltin<"__nvvm_sust_b_3d_i16_clamp">;
2835 def int_nvvm_sust_b_3d_i32_clamp
2836   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2837                    llvm_i32_ty, llvm_i32_ty], [],
2838               "llvm.nvvm.sust.b.3d.i32.clamp">,
2839     GCCBuiltin<"__nvvm_sust_b_3d_i32_clamp">;
2840 def int_nvvm_sust_b_3d_i64_clamp
2841   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2842                    llvm_i32_ty, llvm_i64_ty], [],
2843               "llvm.nvvm.sust.b.3d.i64.clamp">,
2844     GCCBuiltin<"__nvvm_sust_b_3d_i64_clamp">;
2845 def int_nvvm_sust_b_3d_v2i8_clamp
2846   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2847                    llvm_i16_ty, llvm_i16_ty], [],
2848               "llvm.nvvm.sust.b.3d.v2i8.clamp">,
2849     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_clamp">;
2850 def int_nvvm_sust_b_3d_v2i16_clamp
2851   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2852                    llvm_i16_ty, llvm_i16_ty], [],
2853               "llvm.nvvm.sust.b.3d.v2i16.clamp">,
2854     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_clamp">;
2855 def int_nvvm_sust_b_3d_v2i32_clamp
2856   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2857                    llvm_i32_ty, llvm_i32_ty], [],
2858               "llvm.nvvm.sust.b.3d.v2i32.clamp">,
2859     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_clamp">;
2860 def int_nvvm_sust_b_3d_v2i64_clamp
2861   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2862                    llvm_i64_ty, llvm_i64_ty], [],
2863               "llvm.nvvm.sust.b.3d.v2i64.clamp">,
2864     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_clamp">;
2865 def int_nvvm_sust_b_3d_v4i8_clamp
2866   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2867                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2868               "llvm.nvvm.sust.b.3d.v4i8.clamp">,
2869     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_clamp">;
2870 def int_nvvm_sust_b_3d_v4i16_clamp
2871   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2872                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2873               "llvm.nvvm.sust.b.3d.v4i16.clamp">,
2874     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_clamp">;
2875 def int_nvvm_sust_b_3d_v4i32_clamp
2876   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2877                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2878               "llvm.nvvm.sust.b.3d.v4i32.clamp">,
2879     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_clamp">;
2880
2881
2882 // .trap variant
2883 def int_nvvm_sust_b_1d_i8_trap
2884   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2885               "llvm.nvvm.sust.b.1d.i8.trap">,
2886     GCCBuiltin<"__nvvm_sust_b_1d_i8_trap">;
2887 def int_nvvm_sust_b_1d_i16_trap
2888   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
2889               "llvm.nvvm.sust.b.1d.i16.trap">,
2890     GCCBuiltin<"__nvvm_sust_b_1d_i16_trap">;
2891 def int_nvvm_sust_b_1d_i32_trap
2892   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2893               "llvm.nvvm.sust.b.1d.i32.trap">,
2894     GCCBuiltin<"__nvvm_sust_b_1d_i32_trap">;
2895 def int_nvvm_sust_b_1d_i64_trap
2896   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
2897               "llvm.nvvm.sust.b.1d.i64.trap">,
2898     GCCBuiltin<"__nvvm_sust_b_1d_i64_trap">;
2899 def int_nvvm_sust_b_1d_v2i8_trap
2900   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2901               "llvm.nvvm.sust.b.1d.v2i8.trap">,
2902     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
2903 def int_nvvm_sust_b_1d_v2i16_trap
2904   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
2905               "llvm.nvvm.sust.b.1d.v2i16.trap">,
2906     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
2907 def int_nvvm_sust_b_1d_v2i32_trap
2908   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2909               "llvm.nvvm.sust.b.1d.v2i32.trap">,
2910     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
2911 def int_nvvm_sust_b_1d_v2i64_trap
2912   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
2913               "llvm.nvvm.sust.b.1d.v2i64.trap">,
2914     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_trap">;
2915 def int_nvvm_sust_b_1d_v4i8_trap
2916   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2917                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2918               "llvm.nvvm.sust.b.1d.v4i8.trap">,
2919     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
2920 def int_nvvm_sust_b_1d_v4i16_trap
2921   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
2922                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2923               "llvm.nvvm.sust.b.1d.v4i16.trap">,
2924     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
2925 def int_nvvm_sust_b_1d_v4i32_trap
2926   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2927                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2928               "llvm.nvvm.sust.b.1d.v4i32.trap">,
2929     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
2930
2931
2932 def int_nvvm_sust_b_1d_array_i8_trap
2933   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2934               "llvm.nvvm.sust.b.1d.array.i8.trap">,
2935     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
2936 def int_nvvm_sust_b_1d_array_i16_trap
2937   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2938               "llvm.nvvm.sust.b.1d.array.i16.trap">,
2939     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
2940 def int_nvvm_sust_b_1d_array_i32_trap
2941   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2942               "llvm.nvvm.sust.b.1d.array.i32.trap">,
2943     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
2944 def int_nvvm_sust_b_1d_array_i64_trap
2945   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2946               "llvm.nvvm.sust.b.1d.array.i64.trap">,
2947     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_trap">;
2948 def int_nvvm_sust_b_1d_array_v2i8_trap
2949   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2950                    llvm_i16_ty, llvm_i16_ty], [],
2951               "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
2952     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
2953 def int_nvvm_sust_b_1d_array_v2i16_trap
2954   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2955                    llvm_i16_ty, llvm_i16_ty], [],
2956               "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
2957     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
2958 def int_nvvm_sust_b_1d_array_v2i32_trap
2959   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2960                    llvm_i32_ty, llvm_i32_ty], [],
2961               "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
2962     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
2963 def int_nvvm_sust_b_1d_array_v2i64_trap
2964   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2965                    llvm_i64_ty, llvm_i64_ty], [],
2966               "llvm.nvvm.sust.b.1d.array.v2i64.trap">,
2967     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_trap">;
2968 def int_nvvm_sust_b_1d_array_v4i8_trap
2969   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2970                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2971               "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
2972     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
2973 def int_nvvm_sust_b_1d_array_v4i16_trap
2974   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
2975                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
2976               "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
2977     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
2978 def int_nvvm_sust_b_1d_array_v4i32_trap
2979   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
2980                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2981               "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
2982     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
2983
2984
2985 def int_nvvm_sust_b_2d_i8_trap
2986   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2987               "llvm.nvvm.sust.b.2d.i8.trap">,
2988     GCCBuiltin<"__nvvm_sust_b_2d_i8_trap">;
2989 def int_nvvm_sust_b_2d_i16_trap
2990   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
2991               "llvm.nvvm.sust.b.2d.i16.trap">,
2992     GCCBuiltin<"__nvvm_sust_b_2d_i16_trap">;
2993 def int_nvvm_sust_b_2d_i32_trap
2994   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2995               "llvm.nvvm.sust.b.2d.i32.trap">,
2996     GCCBuiltin<"__nvvm_sust_b_2d_i32_trap">;
2997 def int_nvvm_sust_b_2d_i64_trap
2998   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
2999               "llvm.nvvm.sust.b.2d.i64.trap">,
3000     GCCBuiltin<"__nvvm_sust_b_2d_i64_trap">;
3001 def int_nvvm_sust_b_2d_v2i8_trap
3002   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3003                    llvm_i16_ty, llvm_i16_ty], [],
3004               "llvm.nvvm.sust.b.2d.v2i8.trap">,
3005     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
3006 def int_nvvm_sust_b_2d_v2i16_trap
3007   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3008                    llvm_i16_ty, llvm_i16_ty], [],
3009               "llvm.nvvm.sust.b.2d.v2i16.trap">,
3010     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
3011 def int_nvvm_sust_b_2d_v2i32_trap
3012   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3013                    llvm_i32_ty, llvm_i32_ty], [],
3014               "llvm.nvvm.sust.b.2d.v2i32.trap">,
3015     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
3016 def int_nvvm_sust_b_2d_v2i64_trap
3017   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3018                    llvm_i64_ty, llvm_i64_ty], [],
3019               "llvm.nvvm.sust.b.2d.v2i64.trap">,
3020     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_trap">;
3021 def int_nvvm_sust_b_2d_v4i8_trap
3022   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3023                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3024               "llvm.nvvm.sust.b.2d.v4i8.trap">,
3025     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
3026 def int_nvvm_sust_b_2d_v4i16_trap
3027   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3028                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3029               "llvm.nvvm.sust.b.2d.v4i16.trap">,
3030     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
3031 def int_nvvm_sust_b_2d_v4i32_trap
3032   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3033                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3034               "llvm.nvvm.sust.b.2d.v4i32.trap">,
3035     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
3036
3037
3038 def int_nvvm_sust_b_2d_array_i8_trap
3039   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3040                    llvm_i32_ty, llvm_i16_ty], [],
3041               "llvm.nvvm.sust.b.2d.array.i8.trap">,
3042     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
3043 def int_nvvm_sust_b_2d_array_i16_trap
3044   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3045                    llvm_i32_ty, llvm_i16_ty], [],
3046               "llvm.nvvm.sust.b.2d.array.i16.trap">,
3047     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
3048 def int_nvvm_sust_b_2d_array_i32_trap
3049   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3050                    llvm_i32_ty, llvm_i32_ty], [],
3051               "llvm.nvvm.sust.b.2d.array.i32.trap">,
3052     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
3053 def int_nvvm_sust_b_2d_array_i64_trap
3054   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3055                    llvm_i32_ty, llvm_i64_ty], [],
3056               "llvm.nvvm.sust.b.2d.array.i64.trap">,
3057     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_trap">;
3058 def int_nvvm_sust_b_2d_array_v2i8_trap
3059   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3060                    llvm_i16_ty, llvm_i16_ty], [],
3061               "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
3062     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
3063 def int_nvvm_sust_b_2d_array_v2i16_trap
3064   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3065                    llvm_i16_ty, llvm_i16_ty], [],
3066               "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
3067     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
3068 def int_nvvm_sust_b_2d_array_v2i32_trap
3069   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3070                    llvm_i32_ty, llvm_i32_ty], [],
3071               "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
3072     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
3073 def int_nvvm_sust_b_2d_array_v2i64_trap
3074   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3075                    llvm_i64_ty, llvm_i64_ty], [],
3076               "llvm.nvvm.sust.b.2d.array.v2i64.trap">,
3077     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_trap">;
3078 def int_nvvm_sust_b_2d_array_v4i8_trap
3079   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3080                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3081               "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
3082     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
3083 def int_nvvm_sust_b_2d_array_v4i16_trap
3084   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3085                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3086               "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
3087     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
3088 def int_nvvm_sust_b_2d_array_v4i32_trap
3089   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3090                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3091               "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
3092     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
3093
3094
3095 def int_nvvm_sust_b_3d_i8_trap
3096   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3097                    llvm_i32_ty, llvm_i16_ty], [],
3098               "llvm.nvvm.sust.b.3d.i8.trap">,
3099     GCCBuiltin<"__nvvm_sust_b_3d_i8_trap">;
3100 def int_nvvm_sust_b_3d_i16_trap
3101   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3102                    llvm_i32_ty, llvm_i16_ty], [],
3103               "llvm.nvvm.sust.b.3d.i16.trap">,
3104     GCCBuiltin<"__nvvm_sust_b_3d_i16_trap">;
3105 def int_nvvm_sust_b_3d_i32_trap
3106   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3107                    llvm_i32_ty, llvm_i32_ty], [],
3108               "llvm.nvvm.sust.b.3d.i32.trap">,
3109     GCCBuiltin<"__nvvm_sust_b_3d_i32_trap">;
3110 def int_nvvm_sust_b_3d_i64_trap
3111   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3112                    llvm_i32_ty, llvm_i64_ty], [],
3113               "llvm.nvvm.sust.b.3d.i64.trap">,
3114     GCCBuiltin<"__nvvm_sust_b_3d_i64_trap">;
3115 def int_nvvm_sust_b_3d_v2i8_trap
3116   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3117                    llvm_i16_ty, llvm_i16_ty], [],
3118               "llvm.nvvm.sust.b.3d.v2i8.trap">,
3119     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
3120 def int_nvvm_sust_b_3d_v2i16_trap
3121   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3122                    llvm_i16_ty, llvm_i16_ty], [],
3123               "llvm.nvvm.sust.b.3d.v2i16.trap">,
3124     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
3125 def int_nvvm_sust_b_3d_v2i32_trap
3126   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3127                    llvm_i32_ty, llvm_i32_ty], [],
3128               "llvm.nvvm.sust.b.3d.v2i32.trap">,
3129     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
3130 def int_nvvm_sust_b_3d_v2i64_trap
3131   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3132                    llvm_i64_ty, llvm_i64_ty], [],
3133               "llvm.nvvm.sust.b.3d.v2i64.trap">,
3134     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_trap">;
3135 def int_nvvm_sust_b_3d_v4i8_trap
3136   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3137                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3138               "llvm.nvvm.sust.b.3d.v4i8.trap">,
3139     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
3140 def int_nvvm_sust_b_3d_v4i16_trap
3141   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3142                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3143               "llvm.nvvm.sust.b.3d.v4i16.trap">,
3144     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
3145 def int_nvvm_sust_b_3d_v4i32_trap
3146   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3147                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3148               "llvm.nvvm.sust.b.3d.v4i32.trap">,
3149     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
3150
3151
3152 // .zero variant
3153 def int_nvvm_sust_b_1d_i8_zero
3154   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3155               "llvm.nvvm.sust.b.1d.i8.zero">,
3156     GCCBuiltin<"__nvvm_sust_b_1d_i8_zero">;
3157 def int_nvvm_sust_b_1d_i16_zero
3158   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3159               "llvm.nvvm.sust.b.1d.i16.zero">,
3160     GCCBuiltin<"__nvvm_sust_b_1d_i16_zero">;
3161 def int_nvvm_sust_b_1d_i32_zero
3162   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3163               "llvm.nvvm.sust.b.1d.i32.zero">,
3164     GCCBuiltin<"__nvvm_sust_b_1d_i32_zero">;
3165 def int_nvvm_sust_b_1d_i64_zero
3166   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3167               "llvm.nvvm.sust.b.1d.i64.zero">,
3168     GCCBuiltin<"__nvvm_sust_b_1d_i64_zero">;
3169 def int_nvvm_sust_b_1d_v2i8_zero
3170   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3171               "llvm.nvvm.sust.b.1d.v2i8.zero">,
3172     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_zero">;
3173 def int_nvvm_sust_b_1d_v2i16_zero
3174   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3175               "llvm.nvvm.sust.b.1d.v2i16.zero">,
3176     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_zero">;
3177 def int_nvvm_sust_b_1d_v2i32_zero
3178   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3179               "llvm.nvvm.sust.b.1d.v2i32.zero">,
3180     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_zero">;
3181 def int_nvvm_sust_b_1d_v2i64_zero
3182   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3183               "llvm.nvvm.sust.b.1d.v2i64.zero">,
3184     GCCBuiltin<"__nvvm_sust_b_1d_v2i64_zero">;
3185 def int_nvvm_sust_b_1d_v4i8_zero
3186   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3187                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3188               "llvm.nvvm.sust.b.1d.v4i8.zero">,
3189     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_zero">;
3190 def int_nvvm_sust_b_1d_v4i16_zero
3191   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3192                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3193               "llvm.nvvm.sust.b.1d.v4i16.zero">,
3194     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_zero">;
3195 def int_nvvm_sust_b_1d_v4i32_zero
3196   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3197                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3198               "llvm.nvvm.sust.b.1d.v4i32.zero">,
3199     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_zero">;
3200
3201
3202 def int_nvvm_sust_b_1d_array_i8_zero
3203   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3204               "llvm.nvvm.sust.b.1d.array.i8.zero">,
3205     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_zero">;
3206 def int_nvvm_sust_b_1d_array_i16_zero
3207   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3208               "llvm.nvvm.sust.b.1d.array.i16.zero">,
3209     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_zero">;
3210 def int_nvvm_sust_b_1d_array_i32_zero
3211   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3212               "llvm.nvvm.sust.b.1d.array.i32.zero">,
3213     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_zero">;
3214 def int_nvvm_sust_b_1d_array_i64_zero
3215   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3216               "llvm.nvvm.sust.b.1d.array.i64.zero">,
3217     GCCBuiltin<"__nvvm_sust_b_1d_array_i64_zero">;
3218 def int_nvvm_sust_b_1d_array_v2i8_zero
3219   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3220                    llvm_i16_ty, llvm_i16_ty], [],
3221               "llvm.nvvm.sust.b.1d.array.v2i8.zero">,
3222     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_zero">;
3223 def int_nvvm_sust_b_1d_array_v2i16_zero
3224   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3225                    llvm_i16_ty, llvm_i16_ty], [],
3226               "llvm.nvvm.sust.b.1d.array.v2i16.zero">,
3227     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_zero">;
3228 def int_nvvm_sust_b_1d_array_v2i32_zero
3229   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3230                    llvm_i32_ty, llvm_i32_ty], [],
3231               "llvm.nvvm.sust.b.1d.array.v2i32.zero">,
3232     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_zero">;
3233 def int_nvvm_sust_b_1d_array_v2i64_zero
3234   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3235                    llvm_i64_ty, llvm_i64_ty], [],
3236               "llvm.nvvm.sust.b.1d.array.v2i64.zero">,
3237     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i64_zero">;
3238 def int_nvvm_sust_b_1d_array_v4i8_zero
3239   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3240                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3241               "llvm.nvvm.sust.b.1d.array.v4i8.zero">,
3242     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_zero">;
3243 def int_nvvm_sust_b_1d_array_v4i16_zero
3244   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3245                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3246               "llvm.nvvm.sust.b.1d.array.v4i16.zero">,
3247     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_zero">;
3248 def int_nvvm_sust_b_1d_array_v4i32_zero
3249   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3250                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3251               "llvm.nvvm.sust.b.1d.array.v4i32.zero">,
3252     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_zero">;
3253
3254
3255 def int_nvvm_sust_b_2d_i8_zero
3256   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3257               "llvm.nvvm.sust.b.2d.i8.zero">,
3258     GCCBuiltin<"__nvvm_sust_b_2d_i8_zero">;
3259 def int_nvvm_sust_b_2d_i16_zero
3260   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3261               "llvm.nvvm.sust.b.2d.i16.zero">,
3262     GCCBuiltin<"__nvvm_sust_b_2d_i16_zero">;
3263 def int_nvvm_sust_b_2d_i32_zero
3264   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3265               "llvm.nvvm.sust.b.2d.i32.zero">,
3266     GCCBuiltin<"__nvvm_sust_b_2d_i32_zero">;
3267 def int_nvvm_sust_b_2d_i64_zero
3268   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3269               "llvm.nvvm.sust.b.2d.i64.zero">,
3270     GCCBuiltin<"__nvvm_sust_b_2d_i64_zero">;
3271 def int_nvvm_sust_b_2d_v2i8_zero
3272   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3273                    llvm_i16_ty, llvm_i16_ty], [],
3274               "llvm.nvvm.sust.b.2d.v2i8.zero">,
3275     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_zero">;
3276 def int_nvvm_sust_b_2d_v2i16_zero
3277   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3278                    llvm_i16_ty, llvm_i16_ty], [],
3279               "llvm.nvvm.sust.b.2d.v2i16.zero">,
3280     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_zero">;
3281 def int_nvvm_sust_b_2d_v2i32_zero
3282   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3283                    llvm_i32_ty, llvm_i32_ty], [],
3284               "llvm.nvvm.sust.b.2d.v2i32.zero">,
3285     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_zero">;
3286 def int_nvvm_sust_b_2d_v2i64_zero
3287   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3288                    llvm_i64_ty, llvm_i64_ty], [],
3289               "llvm.nvvm.sust.b.2d.v2i64.zero">,
3290     GCCBuiltin<"__nvvm_sust_b_2d_v2i64_zero">;
3291 def int_nvvm_sust_b_2d_v4i8_zero
3292   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3293                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3294               "llvm.nvvm.sust.b.2d.v4i8.zero">,
3295     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_zero">;
3296 def int_nvvm_sust_b_2d_v4i16_zero
3297   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3298                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3299               "llvm.nvvm.sust.b.2d.v4i16.zero">,
3300     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_zero">;
3301 def int_nvvm_sust_b_2d_v4i32_zero
3302   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3303                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3304               "llvm.nvvm.sust.b.2d.v4i32.zero">,
3305     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_zero">;
3306
3307
3308 def int_nvvm_sust_b_2d_array_i8_zero
3309   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3310                    llvm_i32_ty, llvm_i16_ty], [],
3311               "llvm.nvvm.sust.b.2d.array.i8.zero">,
3312     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_zero">;
3313 def int_nvvm_sust_b_2d_array_i16_zero
3314   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3315                    llvm_i32_ty, llvm_i16_ty], [],
3316               "llvm.nvvm.sust.b.2d.array.i16.zero">,
3317     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_zero">;
3318 def int_nvvm_sust_b_2d_array_i32_zero
3319   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3320                    llvm_i32_ty, llvm_i32_ty], [],
3321               "llvm.nvvm.sust.b.2d.array.i32.zero">,
3322     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_zero">;
3323 def int_nvvm_sust_b_2d_array_i64_zero
3324   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3325                    llvm_i32_ty, llvm_i64_ty], [],
3326               "llvm.nvvm.sust.b.2d.array.i64.zero">,
3327     GCCBuiltin<"__nvvm_sust_b_2d_array_i64_zero">;
3328 def int_nvvm_sust_b_2d_array_v2i8_zero
3329   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3330                    llvm_i16_ty, llvm_i16_ty], [],
3331               "llvm.nvvm.sust.b.2d.array.v2i8.zero">,
3332     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_zero">;
3333 def int_nvvm_sust_b_2d_array_v2i16_zero
3334   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3335                    llvm_i16_ty, llvm_i16_ty], [],
3336               "llvm.nvvm.sust.b.2d.array.v2i16.zero">,
3337     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_zero">;
3338 def int_nvvm_sust_b_2d_array_v2i32_zero
3339   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3340                    llvm_i32_ty, llvm_i32_ty], [],
3341               "llvm.nvvm.sust.b.2d.array.v2i32.zero">,
3342     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_zero">;
3343 def int_nvvm_sust_b_2d_array_v2i64_zero
3344   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3345                    llvm_i64_ty, llvm_i64_ty], [],
3346               "llvm.nvvm.sust.b.2d.array.v2i64.zero">,
3347     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i64_zero">;
3348 def int_nvvm_sust_b_2d_array_v4i8_zero
3349   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3350                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3351               "llvm.nvvm.sust.b.2d.array.v4i8.zero">,
3352     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_zero">;
3353 def int_nvvm_sust_b_2d_array_v4i16_zero
3354   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3355                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3356               "llvm.nvvm.sust.b.2d.array.v4i16.zero">,
3357     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_zero">;
3358 def int_nvvm_sust_b_2d_array_v4i32_zero
3359   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3360                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3361               "llvm.nvvm.sust.b.2d.array.v4i32.zero">,
3362     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_zero">;
3363
3364
3365 def int_nvvm_sust_b_3d_i8_zero
3366   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3367                    llvm_i32_ty, llvm_i16_ty], [],
3368               "llvm.nvvm.sust.b.3d.i8.zero">,
3369     GCCBuiltin<"__nvvm_sust_b_3d_i8_zero">;
3370 def int_nvvm_sust_b_3d_i16_zero
3371   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3372                    llvm_i32_ty, llvm_i16_ty], [],
3373               "llvm.nvvm.sust.b.3d.i16.zero">,
3374     GCCBuiltin<"__nvvm_sust_b_3d_i16_zero">;
3375 def int_nvvm_sust_b_3d_i32_zero
3376   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3377                    llvm_i32_ty, llvm_i32_ty], [],
3378               "llvm.nvvm.sust.b.3d.i32.zero">,
3379     GCCBuiltin<"__nvvm_sust_b_3d_i32_zero">;
3380 def int_nvvm_sust_b_3d_i64_zero
3381   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3382                    llvm_i32_ty, llvm_i64_ty], [],
3383               "llvm.nvvm.sust.b.3d.i64.zero">,
3384     GCCBuiltin<"__nvvm_sust_b_3d_i64_zero">;
3385 def int_nvvm_sust_b_3d_v2i8_zero
3386   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3387                    llvm_i16_ty, llvm_i16_ty], [],
3388               "llvm.nvvm.sust.b.3d.v2i8.zero">,
3389     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_zero">;
3390 def int_nvvm_sust_b_3d_v2i16_zero
3391   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3392                    llvm_i16_ty, llvm_i16_ty], [],
3393               "llvm.nvvm.sust.b.3d.v2i16.zero">,
3394     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_zero">;
3395 def int_nvvm_sust_b_3d_v2i32_zero
3396   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3397                    llvm_i32_ty, llvm_i32_ty], [],
3398               "llvm.nvvm.sust.b.3d.v2i32.zero">,
3399     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_zero">;
3400 def int_nvvm_sust_b_3d_v2i64_zero
3401   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3402                    llvm_i64_ty, llvm_i64_ty], [],
3403               "llvm.nvvm.sust.b.3d.v2i64.zero">,
3404     GCCBuiltin<"__nvvm_sust_b_3d_v2i64_zero">;
3405 def int_nvvm_sust_b_3d_v4i8_zero
3406   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3407                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3408               "llvm.nvvm.sust.b.3d.v4i8.zero">,
3409     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_zero">;
3410 def int_nvvm_sust_b_3d_v4i16_zero
3411   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3412                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3413               "llvm.nvvm.sust.b.3d.v4i16.zero">,
3414     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_zero">;
3415 def int_nvvm_sust_b_3d_v4i32_zero
3416   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3417                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3418               "llvm.nvvm.sust.b.3d.v4i32.zero">,
3419     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_zero">;
3420
3421
3422
3423 // Formatted
3424
3425 def int_nvvm_sust_p_1d_i8_trap
3426   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3427               "llvm.nvvm.sust.p.1d.i8.trap">,
3428     GCCBuiltin<"__nvvm_sust_p_1d_i8_trap">;
3429 def int_nvvm_sust_p_1d_i16_trap
3430   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3431               "llvm.nvvm.sust.p.1d.i16.trap">,
3432     GCCBuiltin<"__nvvm_sust_p_1d_i16_trap">;
3433 def int_nvvm_sust_p_1d_i32_trap
3434   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3435               "llvm.nvvm.sust.p.1d.i32.trap">,
3436     GCCBuiltin<"__nvvm_sust_p_1d_i32_trap">;
3437 def int_nvvm_sust_p_1d_v2i8_trap
3438   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3439               "llvm.nvvm.sust.p.1d.v2i8.trap">,
3440     GCCBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
3441 def int_nvvm_sust_p_1d_v2i16_trap
3442   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3443               "llvm.nvvm.sust.p.1d.v2i16.trap">,
3444     GCCBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
3445 def int_nvvm_sust_p_1d_v2i32_trap
3446   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3447               "llvm.nvvm.sust.p.1d.v2i32.trap">,
3448     GCCBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
3449 def int_nvvm_sust_p_1d_v4i8_trap
3450   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3451                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3452               "llvm.nvvm.sust.p.1d.v4i8.trap">,
3453     GCCBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
3454 def int_nvvm_sust_p_1d_v4i16_trap
3455   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3456                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3457               "llvm.nvvm.sust.p.1d.v4i16.trap">,
3458     GCCBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
3459 def int_nvvm_sust_p_1d_v4i32_trap
3460   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3461                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3462               "llvm.nvvm.sust.p.1d.v4i32.trap">,
3463     GCCBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
3464
3465
3466 def int_nvvm_sust_p_1d_array_i8_trap
3467   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3468               "llvm.nvvm.sust.p.1d.array.i8.trap">,
3469     GCCBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
3470 def int_nvvm_sust_p_1d_array_i16_trap
3471   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3472               "llvm.nvvm.sust.p.1d.array.i16.trap">,
3473     GCCBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
3474 def int_nvvm_sust_p_1d_array_i32_trap
3475   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3476               "llvm.nvvm.sust.p.1d.array.i32.trap">,
3477     GCCBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
3478 def int_nvvm_sust_p_1d_array_v2i8_trap
3479   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3480                    llvm_i16_ty, llvm_i16_ty], [],
3481               "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
3482     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
3483 def int_nvvm_sust_p_1d_array_v2i16_trap
3484   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3485                    llvm_i16_ty, llvm_i16_ty], [],
3486               "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
3487     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
3488 def int_nvvm_sust_p_1d_array_v2i32_trap
3489   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3490                    llvm_i32_ty, llvm_i32_ty], [],
3491               "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
3492     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
3493 def int_nvvm_sust_p_1d_array_v4i8_trap
3494   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3495                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3496               "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
3497     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
3498 def int_nvvm_sust_p_1d_array_v4i16_trap
3499   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3500                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3501               "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
3502     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
3503 def int_nvvm_sust_p_1d_array_v4i32_trap
3504   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3505                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3506               "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
3507     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
3508
3509
3510 def int_nvvm_sust_p_2d_i8_trap
3511   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3512               "llvm.nvvm.sust.p.2d.i8.trap">,
3513     GCCBuiltin<"__nvvm_sust_p_2d_i8_trap">;
3514 def int_nvvm_sust_p_2d_i16_trap
3515   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3516               "llvm.nvvm.sust.p.2d.i16.trap">,
3517     GCCBuiltin<"__nvvm_sust_p_2d_i16_trap">;
3518 def int_nvvm_sust_p_2d_i32_trap
3519   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3520               "llvm.nvvm.sust.p.2d.i32.trap">,
3521     GCCBuiltin<"__nvvm_sust_p_2d_i32_trap">;
3522 def int_nvvm_sust_p_2d_v2i8_trap
3523   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3524                    llvm_i16_ty, llvm_i16_ty], [],
3525               "llvm.nvvm.sust.p.2d.v2i8.trap">,
3526     GCCBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
3527 def int_nvvm_sust_p_2d_v2i16_trap
3528   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3529                    llvm_i16_ty, llvm_i16_ty], [],
3530               "llvm.nvvm.sust.p.2d.v2i16.trap">,
3531     GCCBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
3532 def int_nvvm_sust_p_2d_v2i32_trap
3533   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3534                    llvm_i32_ty, llvm_i32_ty], [],
3535               "llvm.nvvm.sust.p.2d.v2i32.trap">,
3536     GCCBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
3537 def int_nvvm_sust_p_2d_v4i8_trap
3538   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3539                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3540               "llvm.nvvm.sust.p.2d.v4i8.trap">,
3541     GCCBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
3542 def int_nvvm_sust_p_2d_v4i16_trap
3543   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3544                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3545               "llvm.nvvm.sust.p.2d.v4i16.trap">,
3546     GCCBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
3547 def int_nvvm_sust_p_2d_v4i32_trap
3548   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3549                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3550               "llvm.nvvm.sust.p.2d.v4i32.trap">,
3551     GCCBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
3552
3553
3554 def int_nvvm_sust_p_2d_array_i8_trap
3555   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3556                    llvm_i32_ty, llvm_i16_ty], [],
3557               "llvm.nvvm.sust.p.2d.array.i8.trap">,
3558     GCCBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
3559 def int_nvvm_sust_p_2d_array_i16_trap
3560   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3561                    llvm_i32_ty, llvm_i16_ty], [],
3562               "llvm.nvvm.sust.p.2d.array.i16.trap">,
3563     GCCBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
3564 def int_nvvm_sust_p_2d_array_i32_trap
3565   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3566                    llvm_i32_ty, llvm_i32_ty], [],
3567               "llvm.nvvm.sust.p.2d.array.i32.trap">,
3568     GCCBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
3569 def int_nvvm_sust_p_2d_array_v2i8_trap
3570   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3571                    llvm_i16_ty, llvm_i16_ty], [],
3572               "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
3573     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
3574 def int_nvvm_sust_p_2d_array_v2i16_trap
3575   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3576                    llvm_i16_ty, llvm_i16_ty], [],
3577               "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
3578     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
3579 def int_nvvm_sust_p_2d_array_v2i32_trap
3580   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3581                    llvm_i32_ty, llvm_i32_ty], [],
3582               "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
3583     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
3584 def int_nvvm_sust_p_2d_array_v4i8_trap
3585   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3586                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3587               "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
3588     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
3589 def int_nvvm_sust_p_2d_array_v4i16_trap
3590   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3591                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3592               "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
3593     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
3594 def int_nvvm_sust_p_2d_array_v4i32_trap
3595   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3596                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3597               "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
3598     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
3599
3600
3601 def int_nvvm_sust_p_3d_i8_trap
3602   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3603                    llvm_i32_ty, llvm_i16_ty], [],
3604               "llvm.nvvm.sust.p.3d.i8.trap">,
3605     GCCBuiltin<"__nvvm_sust_p_3d_i8_trap">;
3606 def int_nvvm_sust_p_3d_i16_trap
3607   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3608                    llvm_i32_ty, llvm_i16_ty], [],
3609               "llvm.nvvm.sust.p.3d.i16.trap">,
3610     GCCBuiltin<"__nvvm_sust_p_3d_i16_trap">;
3611 def int_nvvm_sust_p_3d_i32_trap
3612   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3613                    llvm_i32_ty, llvm_i32_ty], [],
3614               "llvm.nvvm.sust.p.3d.i32.trap">,
3615     GCCBuiltin<"__nvvm_sust_p_3d_i32_trap">;
3616 def int_nvvm_sust_p_3d_v2i8_trap
3617   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3618                    llvm_i16_ty, llvm_i16_ty], [],
3619               "llvm.nvvm.sust.p.3d.v2i8.trap">,
3620     GCCBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
3621 def int_nvvm_sust_p_3d_v2i16_trap
3622   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3623                    llvm_i16_ty, llvm_i16_ty], [],
3624               "llvm.nvvm.sust.p.3d.v2i16.trap">,
3625     GCCBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
3626 def int_nvvm_sust_p_3d_v2i32_trap
3627   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3628                    llvm_i32_ty, llvm_i32_ty], [],
3629               "llvm.nvvm.sust.p.3d.v2i32.trap">,
3630     GCCBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
3631 def int_nvvm_sust_p_3d_v4i8_trap
3632   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3633                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3634               "llvm.nvvm.sust.p.3d.v4i8.trap">,
3635     GCCBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
3636 def int_nvvm_sust_p_3d_v4i16_trap
3637   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3638                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3639               "llvm.nvvm.sust.p.3d.v4i16.trap">,
3640     GCCBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
3641 def int_nvvm_sust_p_3d_v4i32_trap
3642   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3643                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3644               "llvm.nvvm.sust.p.3d.v4i32.trap">,
3645     GCCBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
3646
3647
3648 def int_nvvm_rotate_b32
3649   : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
3650               [IntrNoMem], "llvm.nvvm.rotate.b32">,
3651               GCCBuiltin<"__nvvm_rotate_b32">;
3652
3653 def int_nvvm_rotate_b64
3654   :Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
3655              [IntrNoMem], "llvm.nvvm.rotate.b64">,
3656              GCCBuiltin<"__nvvm_rotate_b64">;
3657
3658 def int_nvvm_rotate_right_b64
3659   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
3660               [IntrNoMem], "llvm.nvvm.rotate.right.b64">,
3661               GCCBuiltin<"__nvvm_rotate_right_b64">;
3662
3663 def int_nvvm_swap_lo_hi_b64
3664   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
3665               [IntrNoMem], "llvm.nvvm.swap.lo.hi.b64">,
3666               GCCBuiltin<"__nvvm_swap_lo_hi_b64">;
3667
3668
3669 // Old PTX back-end intrinsics retained here for backwards-compatibility
3670
3671 multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> {
3672 // FIXME: Do we need the 128-bit integer type version?
3673 //    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem]>;
3674
3675 // FIXME: Enable this once v4i32 support is enabled in back-end.
3676 //    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>;
3677
3678   def _x     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3679                GCCBuiltin<!strconcat(prefix, "_x")>;
3680   def _y     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3681                GCCBuiltin<!strconcat(prefix, "_y")>;
3682   def _z     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3683                GCCBuiltin<!strconcat(prefix, "_z")>;
3684   def _w     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3685                GCCBuiltin<!strconcat(prefix, "_w")>;
3686 }
3687
3688 class PTXReadSpecialRegisterIntrinsic_r32<string name>
3689   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
3690     GCCBuiltin<name>;
3691
3692 class PTXReadSpecialRegisterIntrinsic_r64<string name>
3693   : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>,
3694     GCCBuiltin<name>;
3695
3696 defm int_ptx_read_tid        : PTXReadSpecialRegisterIntrinsic_v4i32
3697                                <"__builtin_ptx_read_tid">;
3698 defm int_ptx_read_ntid       : PTXReadSpecialRegisterIntrinsic_v4i32
3699                                <"__builtin_ptx_read_ntid">;
3700
3701 def int_ptx_read_laneid      : PTXReadSpecialRegisterIntrinsic_r32
3702                                <"__builtin_ptx_read_laneid">;
3703 def int_ptx_read_warpid      : PTXReadSpecialRegisterIntrinsic_r32
3704                                <"__builtin_ptx_read_warpid">;
3705 def int_ptx_read_nwarpid     : PTXReadSpecialRegisterIntrinsic_r32
3706                                <"__builtin_ptx_read_nwarpid">;
3707
3708 defm int_ptx_read_ctaid      : PTXReadSpecialRegisterIntrinsic_v4i32
3709                                <"__builtin_ptx_read_ctaid">;
3710 defm int_ptx_read_nctaid     : PTXReadSpecialRegisterIntrinsic_v4i32
3711                                <"__builtin_ptx_read_nctaid">;
3712
3713 def int_ptx_read_smid        : PTXReadSpecialRegisterIntrinsic_r32
3714                                <"__builtin_ptx_read_smid">;
3715 def int_ptx_read_nsmid       : PTXReadSpecialRegisterIntrinsic_r32
3716                                <"__builtin_ptx_read_nsmid">;
3717 def int_ptx_read_gridid      : PTXReadSpecialRegisterIntrinsic_r32
3718                                <"__builtin_ptx_read_gridid">;
3719
3720 def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32
3721                                <"__builtin_ptx_read_lanemask_eq">;
3722 def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32
3723                                <"__builtin_ptx_read_lanemask_le">;
3724 def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32
3725                                <"__builtin_ptx_read_lanemask_lt">;
3726 def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32
3727                                <"__builtin_ptx_read_lanemask_ge">;
3728 def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32
3729                                <"__builtin_ptx_read_lanemask_gt">;
3730
3731 def int_ptx_read_clock       : PTXReadSpecialRegisterIntrinsic_r32
3732                                <"__builtin_ptx_read_clock">;
3733 def int_ptx_read_clock64     : PTXReadSpecialRegisterIntrinsic_r64
3734                                <"__builtin_ptx_read_clock64">;
3735
3736 def int_ptx_read_pm0         : PTXReadSpecialRegisterIntrinsic_r32
3737                                <"__builtin_ptx_read_pm0">;
3738 def int_ptx_read_pm1         : PTXReadSpecialRegisterIntrinsic_r32
3739                                <"__builtin_ptx_read_pm1">;
3740 def int_ptx_read_pm2         : PTXReadSpecialRegisterIntrinsic_r32
3741                                <"__builtin_ptx_read_pm2">;
3742 def int_ptx_read_pm3         : PTXReadSpecialRegisterIntrinsic_r32
3743                                <"__builtin_ptx_read_pm3">;
3744
3745 def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>,
3746                        GCCBuiltin<"__builtin_ptx_bar_sync">;