10b57cec5SDimitry Andric//===- IntrinsicsNVVM.td - Defines NVVM intrinsics ---------*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//
90b57cec5SDimitry Andric// This file defines all of the NVVM-specific intrinsics for use with NVPTX.
100b57cec5SDimitry Andric//
110b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric// The following intrinsics were once defined here, but are now auto-upgraded
140b57cec5SDimitry Andric// to target-generic LLVM intrinsics.
150b57cec5SDimitry Andric//
160b57cec5SDimitry Andric//   * llvm.nvvm.brev32  --> llvm.bitreverse.i32
170b57cec5SDimitry Andric//   * llvm.nvvm.brev64  --> llvm.bitreverse.i64
180b57cec5SDimitry Andric//   * llvm.nvvm.clz.i   --> llvm.ctlz.i32
190b57cec5SDimitry Andric//   * llvm.nvvm.clz.ll  --> trunc i64 llvm.ctlz.i64(x) to i32
200b57cec5SDimitry Andric//   * llvm.nvvm.popc.i  --> llvm.ctpop.i32
210b57cec5SDimitry Andric//   * llvm.nvvm.popc.ll --> trunc i64 llvm.ctpop.i64 to i32
220b57cec5SDimitry Andric//   * llvm.nvvm.abs.i   --> select(x >= -x, x, -x)
230b57cec5SDimitry Andric//   * llvm.nvvm.abs.ll  --> ibid.
240b57cec5SDimitry Andric//   * llvm.nvvm.max.i   --> select(x sge y, x, y)
250b57cec5SDimitry Andric//   * llvm.nvvm.max.ll  --> ibid.
260b57cec5SDimitry Andric//   * llvm.nvvm.max.ui  --> select(x uge y, x, y)
270b57cec5SDimitry Andric//   * llvm.nvvm.max.ull --> ibid.
280b57cec5SDimitry Andric//   * llvm.nvvm.max.i   --> select(x sle y, x, y)
290b57cec5SDimitry Andric//   * llvm.nvvm.max.ll  --> ibid.
300b57cec5SDimitry Andric//   * llvm.nvvm.max.ui  --> select(x ule y, x, y)
310b57cec5SDimitry Andric//   * llvm.nvvm.max.ull --> ibid.
320b57cec5SDimitry Andric//   * llvm.nvvm.h2f     --> llvm.convert.to.fp16.f32
330b57cec5SDimitry Andric
3406c3fb27SDimitry Andricdef llvm_global_ptr_ty  : LLVMQualPointerType<1>;  // (global)ptr
3506c3fb27SDimitry Andricdef llvm_shared_ptr_ty  : LLVMQualPointerType<3>;  // (shared)ptr
360b57cec5SDimitry Andric
370b57cec5SDimitry Andric//
380b57cec5SDimitry Andric// MISC
390b57cec5SDimitry Andric//
400b57cec5SDimitry Andric
410b57cec5SDimitry Andric// Helper class that represents a 'fragment' of an NVPTX *MMA instruction.
420b57cec5SDimitry Andric// Geom: m<M>n<N>k<K>. E.g. m8n32k16
43349cc55cSDimitry Andric// Frag: [a|b|c|d] ([x1|x2|x4] for ldmatrix)
440b57cec5SDimitry Andric// PtxEltType: PTX type for the element.
450b57cec5SDimitry Andricclass WMMA_REGS<string Geom, string Frag, string PtxEltType> {
460b57cec5SDimitry Andric  string geom = Geom;
470b57cec5SDimitry Andric  string frag = Frag;
480b57cec5SDimitry Andric  string ptx_elt_type = PtxEltType;
490b57cec5SDimitry Andric  string gft = Geom#":"#Frag#":"#ptx_elt_type;
500b57cec5SDimitry Andric  string ft = frag#":"#ptx_elt_type;
510b57cec5SDimitry Andric  list<LLVMType> regs = !cond(
52fe6060f1SDimitry Andric    // mma fp ops use smaller fragments than wmma fp ops
53e8d8bef9SDimitry Andric    !eq(gft,"m8n8k4:a:f16") : !listsplat(llvm_v2f16_ty, 2),
54e8d8bef9SDimitry Andric    !eq(gft,"m8n8k4:b:f16") : !listsplat(llvm_v2f16_ty, 2),
55fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:a:f16") : !listsplat(llvm_v2f16_ty, 2),
56fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:b:f16") : [llvm_v2f16_ty],
57fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:c:f16") : !listsplat(llvm_v2f16_ty, 2),
58fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:d:f16") : !listsplat(llvm_v2f16_ty, 2),
59fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:c:f32") : !listsplat(llvm_float_ty, 4),
60fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:d:f32") : !listsplat(llvm_float_ty, 4),
61fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:a:f16") : !listsplat(llvm_v2f16_ty, 4),
62fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:b:f16") : !listsplat(llvm_v2f16_ty, 2),
63fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:c:f16") : !listsplat(llvm_v2f16_ty, 2),
64fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:d:f16") : !listsplat(llvm_v2f16_ty, 2),
65fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:c:f32") : !listsplat(llvm_float_ty, 4),
66fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:d:f32") : !listsplat(llvm_float_ty, 4),
67fe6060f1SDimitry Andric    !eq(gft,"m16n8k4:c:f32") : !listsplat(llvm_float_ty, 4),
68fe6060f1SDimitry Andric    !eq(gft,"m16n8k4:d:f32") : !listsplat(llvm_float_ty, 4),
69480093f4SDimitry Andric
70fe6060f1SDimitry Andric    // wmma fp16 -> fp16/fp32 @  m16n16k16/m8n32k16/m32n8k16
71fe6060f1SDimitry Andric    // All other supported geometries use the same fragment format for f32 and
72fe6060f1SDimitry Andric    // f16, so we only need to consider {fragment, type}.
73e8d8bef9SDimitry Andric    !eq(ft,"a:f16") : !listsplat(llvm_v2f16_ty, 8),
74e8d8bef9SDimitry Andric    !eq(ft,"b:f16") : !listsplat(llvm_v2f16_ty, 8),
75e8d8bef9SDimitry Andric    !eq(ft,"c:f16") : !listsplat(llvm_v2f16_ty, 4),
76e8d8bef9SDimitry Andric    !eq(ft,"d:f16") : !listsplat(llvm_v2f16_ty, 4),
77e8d8bef9SDimitry Andric    !eq(ft,"c:f32") : !listsplat(llvm_float_ty, 8),
78e8d8bef9SDimitry Andric    !eq(ft,"d:f32") : !listsplat(llvm_float_ty, 8),
790b57cec5SDimitry Andric
80fe6060f1SDimitry Andric    // wmma tf32 -> s32 @ m16n16k8
81fe6060f1SDimitry Andric    !eq(gft,"m16n16k8:a:tf32") : !listsplat(llvm_i32_ty, 4),
82fe6060f1SDimitry Andric    !eq(gft,"m16n16k8:b:tf32") : !listsplat(llvm_i32_ty, 4),
83fe6060f1SDimitry Andric
84fe6060f1SDimitry Andric    // mma tf32 -> s32 @ m16n16k8/m16n8k8
85fe6060f1SDimitry Andric    !eq(gft,"m16n8k4:a:tf32") : !listsplat(llvm_i32_ty, 2),
86fe6060f1SDimitry Andric    !eq(gft,"m16n8k4:b:tf32") : [llvm_i32_ty],
87fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:a:tf32") : !listsplat(llvm_i32_ty, 4),
88fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:b:tf32") : !listsplat(llvm_i32_ty, 2),
89fe6060f1SDimitry Andric
90fe6060f1SDimitry Andric    !eq(gft,"m8n8k4:a:f64") : [llvm_double_ty],
91fe6060f1SDimitry Andric    !eq(gft,"m8n8k4:b:f64") : [llvm_double_ty],
92fe6060f1SDimitry Andric    !eq(gft,"m8n8k4:c:f64") : !listsplat(llvm_double_ty, 2),
93fe6060f1SDimitry Andric    !eq(gft,"m8n8k4:d:f64") : !listsplat(llvm_double_ty, 2),
94fe6060f1SDimitry Andric
95fe6060f1SDimitry Andric    // wmma bf16 -> s32 @ m16n16k16/m8n32k16/m32n8k16
96fe6060f1SDimitry Andric    !eq(gft,"m16n16k16:a:bf16") : !listsplat(llvm_i32_ty, 4),
97fe6060f1SDimitry Andric    !eq(gft,"m16n16k16:b:bf16") : !listsplat(llvm_i32_ty, 4),
98fe6060f1SDimitry Andric    !eq(gft,"m8n32k16:a:bf16") : !listsplat(llvm_i32_ty, 2),
99fe6060f1SDimitry Andric    !eq(gft,"m8n32k16:b:bf16") : !listsplat(llvm_i32_ty, 8),
100fe6060f1SDimitry Andric    !eq(gft,"m32n8k16:a:bf16") : !listsplat(llvm_i32_ty, 8),
101fe6060f1SDimitry Andric    !eq(gft,"m32n8k16:b:bf16") : !listsplat(llvm_i32_ty, 2),
102fe6060f1SDimitry Andric
103fe6060f1SDimitry Andric    // mma bf16 -> s32 @ m16n8k16/m16n8k8
104fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:a:bf16") : !listsplat(llvm_i32_ty, 4),
105fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:b:bf16") : !listsplat(llvm_i32_ty, 2),
106fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:a:bf16") : !listsplat(llvm_i32_ty, 2),
107fe6060f1SDimitry Andric    !eq(gft,"m16n8k8:b:bf16") : [llvm_i32_ty],
108fe6060f1SDimitry Andric
109fe6060f1SDimitry Andric    // wmma u8/s8 -> s32 @ m16n16k16/m8n32k16/m32n8k16
110e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:a:u8") : !listsplat(llvm_i32_ty, 2),
111e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:a:s8") : !listsplat(llvm_i32_ty, 2),
112e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:b:u8") : !listsplat(llvm_i32_ty, 2),
113e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:b:s8") : !listsplat(llvm_i32_ty, 2),
114e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:c:s32") : !listsplat(llvm_i32_ty, 8),
115e8d8bef9SDimitry Andric    !eq(gft,"m16n16k16:d:s32") : !listsplat(llvm_i32_ty, 8),
1160b57cec5SDimitry Andric
1170b57cec5SDimitry Andric    !eq(gft,"m8n32k16:a:u8") : [llvm_i32_ty],
1180b57cec5SDimitry Andric    !eq(gft,"m8n32k16:a:s8") : [llvm_i32_ty],
119e8d8bef9SDimitry Andric    !eq(gft,"m8n32k16:b:u8") : !listsplat(llvm_i32_ty, 4),
120e8d8bef9SDimitry Andric    !eq(gft,"m8n32k16:b:s8") : !listsplat(llvm_i32_ty, 4),
121e8d8bef9SDimitry Andric    !eq(gft,"m8n32k16:c:s32") : !listsplat(llvm_i32_ty, 8),
122e8d8bef9SDimitry Andric    !eq(gft,"m8n32k16:d:s32") : !listsplat(llvm_i32_ty, 8),
1230b57cec5SDimitry Andric
124e8d8bef9SDimitry Andric    !eq(gft,"m32n8k16:a:u8") : !listsplat(llvm_i32_ty, 4),
125e8d8bef9SDimitry Andric    !eq(gft,"m32n8k16:a:s8") : !listsplat(llvm_i32_ty, 4),
1260b57cec5SDimitry Andric    !eq(gft,"m32n8k16:b:u8") : [llvm_i32_ty],
1270b57cec5SDimitry Andric    !eq(gft,"m32n8k16:b:s8") : [llvm_i32_ty],
128e8d8bef9SDimitry Andric    !eq(gft,"m32n8k16:c:s32") : !listsplat(llvm_i32_ty, 8),
129e8d8bef9SDimitry Andric    !eq(gft,"m32n8k16:d:s32") : !listsplat(llvm_i32_ty, 8),
1300b57cec5SDimitry Andric
131fe6060f1SDimitry Andric    // mma u8/s8 -> s32 @ m8n8k16/m16n8k16/m16n8k32
132fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:a:u8") : [llvm_i32_ty],
133fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:a:s8") : [llvm_i32_ty],
134fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:b:u8") : [llvm_i32_ty],
135fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:b:s8") : [llvm_i32_ty],
136fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:c:s32") : !listsplat(llvm_i32_ty, 2),
137fe6060f1SDimitry Andric    !eq(gft,"m8n8k16:d:s32") : !listsplat(llvm_i32_ty, 2),
138fe6060f1SDimitry Andric
139fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:a:u8") : !listsplat(llvm_i32_ty, 2),
140fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:a:s8") : !listsplat(llvm_i32_ty, 2),
141fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:b:u8") : [llvm_i32_ty],
142fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:b:s8") : [llvm_i32_ty],
143fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:c:s32") : !listsplat(llvm_i32_ty, 4),
144fe6060f1SDimitry Andric    !eq(gft,"m16n8k16:d:s32") : !listsplat(llvm_i32_ty, 4),
145fe6060f1SDimitry Andric
146fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:a:u8") : !listsplat(llvm_i32_ty, 4),
147fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:a:s8") : !listsplat(llvm_i32_ty, 4),
148fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:b:u8") : !listsplat(llvm_i32_ty, 2),
149fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:b:s8") : !listsplat(llvm_i32_ty, 2),
150fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:c:s32") : !listsplat(llvm_i32_ty, 4),
151fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:d:s32") : !listsplat(llvm_i32_ty, 4),
152fe6060f1SDimitry Andric
153fe6060f1SDimitry Andric    // wmma/mma u4/s4 -> s32 @ m8n8k32 (u4/s4)
1540b57cec5SDimitry Andric    !eq(gft,"m8n8k32:a:u4") : [llvm_i32_ty],
1550b57cec5SDimitry Andric    !eq(gft,"m8n8k32:a:s4") : [llvm_i32_ty],
1560b57cec5SDimitry Andric    !eq(gft,"m8n8k32:b:u4") : [llvm_i32_ty],
1570b57cec5SDimitry Andric    !eq(gft,"m8n8k32:b:s4") : [llvm_i32_ty],
158e8d8bef9SDimitry Andric    !eq(gft,"m8n8k32:c:s32") : !listsplat(llvm_i32_ty, 2),
159e8d8bef9SDimitry Andric    !eq(gft,"m8n8k32:d:s32") : !listsplat(llvm_i32_ty, 2),
160fe6060f1SDimitry Andric
161fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:a:u4") : !listsplat(llvm_i32_ty, 2),
162fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:a:s4") : !listsplat(llvm_i32_ty, 2),
163fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:b:u4") : [llvm_i32_ty],
164fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:b:s4") : [llvm_i32_ty],
165fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:c:s32") : !listsplat(llvm_i32_ty, 4),
166fe6060f1SDimitry Andric    !eq(gft,"m16n8k32:d:s32") : !listsplat(llvm_i32_ty, 4),
167fe6060f1SDimitry Andric
168fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:a:u4") : !listsplat(llvm_i32_ty, 4),
169fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:a:s4") : !listsplat(llvm_i32_ty, 4),
170fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:b:u4") : !listsplat(llvm_i32_ty, 2),
171fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:b:s4") : !listsplat(llvm_i32_ty, 2),
172fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:c:s32") : !listsplat(llvm_i32_ty, 4),
173fe6060f1SDimitry Andric    !eq(gft,"m16n8k64:d:s32") : !listsplat(llvm_i32_ty, 4),
174fe6060f1SDimitry Andric
175fe6060f1SDimitry Andric    // wmma/mma b1 -> s32 @ m8n8k128(b1)
176fe6060f1SDimitry Andric    !eq(gft,"m8n8k128:a:b1") : [llvm_i32_ty],
177fe6060f1SDimitry Andric    !eq(gft,"m8n8k128:b:b1") : [llvm_i32_ty],
178fe6060f1SDimitry Andric    !eq(gft,"m8n8k128:c:s32") : !listsplat(llvm_i32_ty, 2),
179fe6060f1SDimitry Andric    !eq(gft,"m8n8k128:d:s32") : !listsplat(llvm_i32_ty, 2),
180fe6060f1SDimitry Andric
181fe6060f1SDimitry Andric    !eq(gft,"m16n8k128:a:b1") : !listsplat(llvm_i32_ty, 2),
182fe6060f1SDimitry Andric    !eq(gft,"m16n8k128:b:b1") : [llvm_i32_ty],
183fe6060f1SDimitry Andric    !eq(gft,"m16n8k128:c:s32") : !listsplat(llvm_i32_ty, 4),
184fe6060f1SDimitry Andric    !eq(gft,"m16n8k128:d:s32") : !listsplat(llvm_i32_ty, 4),
185fe6060f1SDimitry Andric
186fe6060f1SDimitry Andric    !eq(gft,"m16n8k256:a:b1") : !listsplat(llvm_i32_ty, 4),
187fe6060f1SDimitry Andric    !eq(gft,"m16n8k256:b:b1") : !listsplat(llvm_i32_ty, 2),
188fe6060f1SDimitry Andric    !eq(gft,"m16n8k256:c:s32") : !listsplat(llvm_i32_ty, 4),
189fe6060f1SDimitry Andric    !eq(gft,"m16n8k256:d:s32") : !listsplat(llvm_i32_ty, 4),
190349cc55cSDimitry Andric
191349cc55cSDimitry Andric    // ldmatrix b16 -> s32 @ m8n8
192349cc55cSDimitry Andric    !eq(gft,"m8n8:x1:b16") : !listsplat(llvm_i32_ty, 1),
193349cc55cSDimitry Andric    !eq(gft,"m8n8:x2:b16") : !listsplat(llvm_i32_ty, 2),
194349cc55cSDimitry Andric    !eq(gft,"m8n8:x4:b16") : !listsplat(llvm_i32_ty, 4),
1950b57cec5SDimitry Andric  );
1960b57cec5SDimitry Andric}
1970b57cec5SDimitry Andric
1980b57cec5SDimitry Andricclass WMMA_NAME_LDST<string Op, WMMA_REGS Frag, string Layout, int WithStride> {
1990b57cec5SDimitry Andric  string intr = "llvm.nvvm.wmma."
2000b57cec5SDimitry Andric                # Frag.geom
2010b57cec5SDimitry Andric                # "." # Op
2020b57cec5SDimitry Andric                # "." # Frag.frag
2030b57cec5SDimitry Andric                # "." # Layout
2040b57cec5SDimitry Andric                # !if(WithStride, ".stride", "")
2050b57cec5SDimitry Andric                # "." # Frag.ptx_elt_type
2060b57cec5SDimitry Andric                ;
2070b57cec5SDimitry Andric  // TODO(tra): record name should ideally use the same field order as the intrinsic.
2080b57cec5SDimitry Andric  // E.g. string record = !subst("llvm", "int",
2090b57cec5SDimitry Andric  //                      !subst(".", "_", llvm));
2100b57cec5SDimitry Andric  string record = "int_nvvm_wmma_"
2110b57cec5SDimitry Andric                # Frag.geom
2120b57cec5SDimitry Andric                # "_" # Op
2130b57cec5SDimitry Andric                # "_" # Frag.frag
2140b57cec5SDimitry Andric                # "_" # Frag.ptx_elt_type
2150b57cec5SDimitry Andric                # "_" # Layout
2160b57cec5SDimitry Andric                # !if(WithStride, "_stride", "");
2170b57cec5SDimitry Andric}
2180b57cec5SDimitry Andric
2190b57cec5SDimitry Andricclass MMA_SIGNATURE<WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
2200b57cec5SDimitry Andric  list<WMMA_REGS> id_frags = !cond(
221fe6060f1SDimitry Andric     // FP16 ops are identified by accumulator & result type.
222fe6060f1SDimitry Andric     !eq(A.ptx_elt_type, "f16") : [D, C],
223fe6060f1SDimitry Andric     // other ops are identified by input types.
224fe6060f1SDimitry Andric     !ne(A.ptx_elt_type, B.ptx_elt_type): [A, B],
225fe6060f1SDimitry Andric     true: [A]
2260b57cec5SDimitry Andric     );
2270b57cec5SDimitry Andric   string ret = !foldl("", id_frags, a, b, !strconcat(a, ".", b.ptx_elt_type));
2280b57cec5SDimitry Andric}
2290b57cec5SDimitry Andric
230fe6060f1SDimitry Andricclass WMMA_NAME<string ALayout, string BLayout, int Satfinite, string Rnd, string b1op,
2310b57cec5SDimitry Andric                WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
2320b57cec5SDimitry Andric  string signature = MMA_SIGNATURE<A, B, C, D>.ret;
233fe6060f1SDimitry Andric  string llvm = "llvm.nvvm.wmma."
2340b57cec5SDimitry Andric                # A.geom
2350b57cec5SDimitry Andric                # ".mma"
236fe6060f1SDimitry Andric                # b1op
2370b57cec5SDimitry Andric                # "." # ALayout
2380b57cec5SDimitry Andric                # "." # BLayout
239fe6060f1SDimitry Andric                # !if(!ne(Rnd, ""), !strconcat(".", Rnd), "")
2400b57cec5SDimitry Andric                # signature
241fe6060f1SDimitry Andric                # !if(Satfinite, ".satfinite", "");
2420b57cec5SDimitry Andric
2430b57cec5SDimitry Andric  string record = !subst(".", "_",
2440b57cec5SDimitry Andric                  !subst("llvm.", "int_", llvm));
2450b57cec5SDimitry Andric}
2460b57cec5SDimitry Andric
247fe6060f1SDimitry Andricclass MMA_NAME<string ALayout, string BLayout, int Satfinite, string b1op,
248fe6060f1SDimitry Andric               WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
249fe6060f1SDimitry Andric  string signature = MMA_SIGNATURE<A, B, C, D>.ret;
250fe6060f1SDimitry Andric  string llvm = "llvm.nvvm.mma"
251fe6060f1SDimitry Andric                # b1op
252fe6060f1SDimitry Andric                # "." # A.geom
253fe6060f1SDimitry Andric                # "." # ALayout
254fe6060f1SDimitry Andric                # "." # BLayout
255fe6060f1SDimitry Andric                # !if(Satfinite, ".satfinite", "")
256fe6060f1SDimitry Andric                # signature;
257fe6060f1SDimitry Andric  string record = !subst(".", "_",
258fe6060f1SDimitry Andric                  !subst("llvm.", "int_", llvm));
259fe6060f1SDimitry Andric}
260fe6060f1SDimitry Andric
261349cc55cSDimitry Andricclass LDMATRIX_NAME<WMMA_REGS Frag, int Trans> {
262349cc55cSDimitry Andric  string intr = "llvm.nvvm.ldmatrix.sync.aligned"
263349cc55cSDimitry Andric                # "." # Frag.geom
264349cc55cSDimitry Andric                # "." # Frag.frag
265349cc55cSDimitry Andric                # !if(Trans, ".trans", "")
266349cc55cSDimitry Andric                # "." # Frag.ptx_elt_type
267349cc55cSDimitry Andric                ;
268349cc55cSDimitry Andric  string record = !subst(".", "_",
269349cc55cSDimitry Andric                  !subst("llvm.", "int_", intr));
270349cc55cSDimitry Andric}
271349cc55cSDimitry Andric
2720b57cec5SDimitry Andric// Generates list of 4-tuples of WMMA_REGS representing a valid MMA op.
2730b57cec5SDimitry Andric//   Geom: list of supported geometries.
2740b57cec5SDimitry Andric//   TypeN: PTX type of the corresponding fragment's element.
2750b57cec5SDimitry Andric//   TypeB and TypeD may be empty if it must match that of TypeA or TypeC.
2760b57cec5SDimitry Andricclass MMA_OPS<list<string> Geom, list<string> TypeA, list<string> TypeB,
2770b57cec5SDimitry Andric            list<string> TypeC, list<string> TypeD> {
2780b57cec5SDimitry Andric  list<list<WMMA_REGS>> ret =
2790b57cec5SDimitry Andric     !foldl([]<list<WMMA_REGS>>, Geom, t1, geom, !listconcat(t1,
2800b57cec5SDimitry Andric     !foldl([]<list<WMMA_REGS>>, TypeA, t2, type_a, !listconcat(t2,
2810b57cec5SDimitry Andric     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeB), TypeB, [type_a]), t3, type_b, !listconcat(t3,
2820b57cec5SDimitry Andric     !foldl([]<list<WMMA_REGS>>, TypeC, t4, type_c, !listconcat(t4,
283480093f4SDimitry Andric     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeD), TypeD, [type_c]), t5, type_d, !listconcat(t5,
2840b57cec5SDimitry Andric            [[WMMA_REGS<geom, "a", type_a>,
2850b57cec5SDimitry Andric              WMMA_REGS<geom, "b", type_b>,
2860b57cec5SDimitry Andric              WMMA_REGS<geom, "c", type_c>,
2870b57cec5SDimitry Andric              WMMA_REGS<geom, "d", type_d>]]))))))))));
2880b57cec5SDimitry Andric   // Debugging aid for readable representation of the list above.
2890b57cec5SDimitry Andric   list<list<string>> ops = !foreach(x, ret, [x[0].gft, x[1].gft, x[2].gft, x[3].gft]);
2900b57cec5SDimitry Andric}
2910b57cec5SDimitry Andric
2920b57cec5SDimitry Andricclass MMA_LDST_OPS<list<string> Geom, list<string> Frags, list<string> Types> {
2930b57cec5SDimitry Andric  list<WMMA_REGS> ret =
2940b57cec5SDimitry Andric     !foldl([]<WMMA_REGS>, Geom, t1, geom, !listconcat(t1,
2950b57cec5SDimitry Andric     !foldl([]<WMMA_REGS>, Frags, t2, frag, !listconcat(t2,
2960b57cec5SDimitry Andric     !foldl([]<WMMA_REGS>, Types, t3, type, !listconcat(t3,
2970b57cec5SDimitry Andric            [WMMA_REGS<geom, frag, type>]))))));
2980b57cec5SDimitry Andric   // Debugging aid for readable representation of the list above.
2990b57cec5SDimitry Andric   list<string> ops = !foreach(x, ret, x.gft);
3000b57cec5SDimitry Andric}
3010b57cec5SDimitry Andric
302349cc55cSDimitry Andricclass LDMATRIX_OPS<list<string> Geom, list<string> Frags, list<string> Types> {
303349cc55cSDimitry Andric  list<WMMA_REGS> ret =
304349cc55cSDimitry Andric     !foldl([]<WMMA_REGS>, Geom, t1, geom, !listconcat(t1,
305349cc55cSDimitry Andric     !foldl([]<WMMA_REGS>, Frags, t2, frag, !listconcat(t2,
306349cc55cSDimitry Andric     !foldl([]<WMMA_REGS>, Types, t3, type, !listconcat(t3,
307349cc55cSDimitry Andric            [WMMA_REGS<geom, frag, type>]))))));
308349cc55cSDimitry Andric   // Debugging aid for readable representation of the list above.
309349cc55cSDimitry Andric   list<string> ops = !foreach(x, ret, x.gft);
310349cc55cSDimitry Andric}
311349cc55cSDimitry Andric
312349cc55cSDimitry Andric// Creates list of valid combinations of fragments. This is the main list that
3130b57cec5SDimitry Andric// drives generation of corresponding intrinsics and instructions.
314349cc55cSDimitry Andricclass NVVM_MMA_OPS {
315fe6060f1SDimitry Andric  list<list<WMMA_REGS>> tf32_wmma_ops = MMA_OPS<
316fe6060f1SDimitry Andric            ["m16n16k8"],
317fe6060f1SDimitry Andric            ["tf32"], [], ["f32"], []>.ret;
318fe6060f1SDimitry Andric  list<list<WMMA_REGS>> bf16_wmma_ops = MMA_OPS<
319fe6060f1SDimitry Andric            ["m16n16k16", "m32n8k16", "m8n32k16"],
320fe6060f1SDimitry Andric            ["bf16"], [], ["f32"], []>.ret;
321fe6060f1SDimitry Andric  list<list<WMMA_REGS>> f64_wmma_ops = MMA_OPS<
322480093f4SDimitry Andric            ["m8n8k4"],
323fe6060f1SDimitry Andric            ["f64"], [], ["f64"], []>.ret;
324480093f4SDimitry Andric  list<list<WMMA_REGS>> fp_wmma_ops = MMA_OPS<
3250b57cec5SDimitry Andric            ["m16n16k16", "m32n8k16", "m8n32k16"],
3260b57cec5SDimitry Andric            ["f16"], [], ["f16", "f32"], ["f16", "f32"]>.ret;
327480093f4SDimitry Andric  list<list<WMMA_REGS>> int_wmma_ops = MMA_OPS<
3280b57cec5SDimitry Andric            ["m16n16k16", "m32n8k16", "m8n32k16"],
3290b57cec5SDimitry Andric            ["s8", "u8"], [], ["s32"], []>.ret;
330480093f4SDimitry Andric  list<list<WMMA_REGS>> subint_wmma_ops = MMA_OPS<
3310b57cec5SDimitry Andric            ["m8n8k32"],
3320b57cec5SDimitry Andric            ["s4", "u4"], [], ["s32"], []>.ret;
333480093f4SDimitry Andric  list<list<WMMA_REGS>> bit_wmma_ops = MMA_OPS<
3340b57cec5SDimitry Andric            ["m8n8k128"],
3350b57cec5SDimitry Andric            ["b1"], [], ["s32"], []>.ret;
336fe6060f1SDimitry Andric  list<list<WMMA_REGS>> all_wmma_ops = !listconcat(
337fe6060f1SDimitry Andric            tf32_wmma_ops, bf16_wmma_ops, f64_wmma_ops,
338fe6060f1SDimitry Andric            fp_wmma_ops, int_wmma_ops, subint_wmma_ops, bit_wmma_ops);
339fe6060f1SDimitry Andric
340fe6060f1SDimitry Andric  list<list<WMMA_REGS>> tf32_mma_ops = MMA_OPS<
341fe6060f1SDimitry Andric            ["m16n8k4", "m16n8k8"],
342fe6060f1SDimitry Andric            ["tf32"], [], ["f32"], []>.ret;
343fe6060f1SDimitry Andric  list<list<WMMA_REGS>> bf16_mma_ops = MMA_OPS<
344fe6060f1SDimitry Andric            ["m16n8k16", "m16n8k8"],
345fe6060f1SDimitry Andric            ["bf16"], [], ["f32"], []>.ret;
346fe6060f1SDimitry Andric  list<list<WMMA_REGS>> f64_mma_ops = MMA_OPS<
347fe6060f1SDimitry Andric            ["m8n8k4"],
348fe6060f1SDimitry Andric            ["f64"], [], ["f64"], []>.ret;
349fe6060f1SDimitry Andric  list<list<WMMA_REGS>> fp_mma_ops = MMA_OPS<
350fe6060f1SDimitry Andric            ["m8n8k4", "m16n8k8", "m16n8k16"],
351fe6060f1SDimitry Andric            ["f16"], [], ["f16", "f32"], ["f16", "f32"]>.ret;
352fe6060f1SDimitry Andric  list<list<WMMA_REGS>> int_mma_ops = MMA_OPS<
353fe6060f1SDimitry Andric            ["m8n8k16", "m16n8k16", "m16n8k32"],
354fe6060f1SDimitry Andric            ["s8", "u8"], ["s8", "u8"], ["s32"], []>.ret;
355fe6060f1SDimitry Andric  list<list<WMMA_REGS>> subint_mma_ops = MMA_OPS<
356fe6060f1SDimitry Andric            ["m8n8k32", "m16n8k32", "m16n8k64"],
357fe6060f1SDimitry Andric            ["s4", "u4"], ["s4", "u4"], ["s32"], []>.ret;
358fe6060f1SDimitry Andric  list<list<WMMA_REGS>> bit_mma_ops = MMA_OPS<
359fe6060f1SDimitry Andric            ["m8n8k128", "m16n8k128", "m16n8k256"],
360fe6060f1SDimitry Andric            ["b1"], [], ["s32"], []>.ret;
361480093f4SDimitry Andric  list<list<WMMA_REGS>> all_mma_ops = !listconcat(
362fe6060f1SDimitry Andric            tf32_mma_ops, bf16_mma_ops, f64_mma_ops,
363fe6060f1SDimitry Andric            fp_mma_ops, int_mma_ops, subint_mma_ops, bit_mma_ops);
3640b57cec5SDimitry Andric
3650b57cec5SDimitry Andric  list<WMMA_REGS> ldst_ab_ops = MMA_LDST_OPS<
3660b57cec5SDimitry Andric            ["m16n16k16", "m32n8k16", "m8n32k16"],
367fe6060f1SDimitry Andric            ["a", "b"], ["f16", "u8", "s8", "bf16"]>.ret;
3680b57cec5SDimitry Andric  list<WMMA_REGS> ldst_cd_ops = MMA_LDST_OPS<
3690b57cec5SDimitry Andric            ["m16n16k16", "m32n8k16", "m8n32k16"],
3700b57cec5SDimitry Andric            ["c", "d"], ["f16", "f32", "s32"]>.ret;
371fe6060f1SDimitry Andric  list<WMMA_REGS> ldst_tf32_ab_ops = MMA_LDST_OPS<
372fe6060f1SDimitry Andric            ["m16n16k8"],
373fe6060f1SDimitry Andric            ["a", "b"], ["tf32"]>.ret;
374fe6060f1SDimitry Andric  list<WMMA_REGS> ldst_tf32_cd_ops = MMA_LDST_OPS<
375fe6060f1SDimitry Andric            ["m16n16k8"],
376fe6060f1SDimitry Andric            ["c", "d"], ["f32"]>.ret;
377fe6060f1SDimitry Andric  list<WMMA_REGS> ldst_f64_abcd_ops = MMA_LDST_OPS<
378fe6060f1SDimitry Andric            ["m8n8k4"],
379fe6060f1SDimitry Andric            ["a", "b", "c", "d"], ["f64"]>.ret;
3800b57cec5SDimitry Andric  list<WMMA_REGS> ldst_subint_ab_ops = MMA_LDST_OPS<
3810b57cec5SDimitry Andric            ["m8n8k32"], ["a", "b"], ["s4","u4"]>.ret;
3820b57cec5SDimitry Andric  list<WMMA_REGS> ldst_bit_ab_ops = MMA_LDST_OPS<
3830b57cec5SDimitry Andric            ["m8n8k128"], ["a", "b"], ["b1"]>.ret;
3840b57cec5SDimitry Andric  list<WMMA_REGS> ldst_subint_cd_ops = MMA_LDST_OPS<
3850b57cec5SDimitry Andric            ["m8n8k32", "m8n8k128"],  ["c", "d"], ["s32"]>.ret;
3860b57cec5SDimitry Andric  list<WMMA_REGS> all_ldst_ops = !listconcat(ldst_ab_ops, ldst_cd_ops,
387fe6060f1SDimitry Andric                                             ldst_tf32_ab_ops,
388fe6060f1SDimitry Andric                                             ldst_tf32_cd_ops,
389fe6060f1SDimitry Andric                                             ldst_f64_abcd_ops,
3900b57cec5SDimitry Andric                                             ldst_subint_ab_ops,
3910b57cec5SDimitry Andric                                             ldst_bit_ab_ops,
3920b57cec5SDimitry Andric                                             ldst_subint_cd_ops);
3930b57cec5SDimitry Andric  // Separate A/B/C fragments (loads) from D (stores).
394e8d8bef9SDimitry Andric  list<WMMA_REGS> all_ld_ops = !filter(op, all_ldst_ops, !ne(op.frag, "d"));
395e8d8bef9SDimitry Andric  list<WMMA_REGS> all_st_ops = !filter(op, all_ldst_ops, !eq(op.frag, "d"));
396349cc55cSDimitry Andric
397349cc55cSDimitry Andric  list<WMMA_REGS> ldmatrix_b16_ops = LDMATRIX_OPS<
398349cc55cSDimitry Andric    ["m8n8"], ["x1", "x2", "x4"], ["b16"]>.ret;
399349cc55cSDimitry Andric  list<WMMA_REGS> all_ldmatrix_ops = ldmatrix_b16_ops;
4000b57cec5SDimitry Andric}
4010b57cec5SDimitry Andric
4020b57cec5SDimitry Andricdef NVVM_MMA_OPS : NVVM_MMA_OPS;
4030b57cec5SDimitry Andric
404fe6060f1SDimitry Andric// Returns true if this combination of fragment and layout for WMMA load/store
405fe6060f1SDimitry Andric// ops is supported; false otherwise.
406fe6060f1SDimitry Andric// E.g.
407fe6060f1SDimitry Andric// if NVVM_WMMA_LDST_SUPPORTED<...>.ret then
408fe6060f1SDimitry Andric//   def : FOO<>; // The record will only be defined for supported ops.
409fe6060f1SDimitry Andric//
410fe6060f1SDimitry Andricclass NVVM_WMMA_LDST_SUPPORTED<WMMA_REGS frag, string layout> {
411fe6060f1SDimitry Andric  string f = frag.frag;
412fe6060f1SDimitry Andric  string t = frag.ptx_elt_type;
413fe6060f1SDimitry Andric
414fe6060f1SDimitry Andric  bit ret = !cond(
415fe6060f1SDimitry Andric    // Sub-int load and store requires A fragment to be of row layout and B
416fe6060f1SDimitry Andric    // fragments to be of column layout.
417fe6060f1SDimitry Andric    !and(!or(!eq(t, "b1"),
418fe6060f1SDimitry Andric             !eq(t, "u4"),
419fe6060f1SDimitry Andric             !eq(t, "s4")),
420fe6060f1SDimitry Andric         !or(!and(!eq(f, "a"),
421fe6060f1SDimitry Andric                  !ne(layout, "row")),
422fe6060f1SDimitry Andric             !and(!eq(f, "b"),
423fe6060f1SDimitry Andric                  !ne(layout, "col")))) : false,
424fe6060f1SDimitry Andric    true: true
425fe6060f1SDimitry Andric  );
426fe6060f1SDimitry Andric}
427fe6060f1SDimitry Andric
428fe6060f1SDimitry Andric// Returns true if this combination of layout/satf/rnd for WMMA ops is
429fe6060f1SDimitry Andric// supported; false otherwise.
430fe6060f1SDimitry Andric// E.g.
431fe6060f1SDimitry Andric// if NVVM_WMMA_SUPPORTED<...>.ret then
432fe6060f1SDimitry Andric//   def : FOO<>; // The record will only be defined for supported ops.
433fe6060f1SDimitry Andric//
434fe6060f1SDimitry Andricclass NVVM_WMMA_SUPPORTED<list<WMMA_REGS> frags, string layout_a, string layout_b, int satf, string rnd> {
435fe6060f1SDimitry Andric  // WMMA ops check both layouts.
436fe6060f1SDimitry Andric  string layout = layout_a # ":" # layout_b;
437fe6060f1SDimitry Andric  string t = frags[0].ptx_elt_type;
438fe6060f1SDimitry Andric
439fe6060f1SDimitry Andric  bit ret = !cond(
440fe6060f1SDimitry Andric    // only f64 wmma functions support rnd options
441fe6060f1SDimitry Andric    // any non f64 type that uses a rnd value is invalid
442fe6060f1SDimitry Andric    !and(!ne(t, "f64"), !ne(rnd, "")) : false,
443fe6060f1SDimitry Andric
444fe6060f1SDimitry Andric    // satf is only valid for select types
445fe6060f1SDimitry Andric    !and(!eq(satf, 1),
446fe6060f1SDimitry Andric         !ne(t, "s8"),
447fe6060f1SDimitry Andric         !ne(t, "u8"),
448fe6060f1SDimitry Andric         !ne(t, "s4"),
449fe6060f1SDimitry Andric         !ne(t, "u4"),
450fe6060f1SDimitry Andric         !ne(t, "f16")): false,
451fe6060f1SDimitry Andric
452fe6060f1SDimitry Andric    // Sub-int wmma requires row/column layout
453fe6060f1SDimitry Andric    !and(!or(!eq(t, "s4"),
454fe6060f1SDimitry Andric             !eq(t, "u4"),
455fe6060f1SDimitry Andric             !eq(t, "b1")),
456fe6060f1SDimitry Andric         !ne(layout, "row:col")) : false,
457fe6060f1SDimitry Andric    true: true
458fe6060f1SDimitry Andric  );
459fe6060f1SDimitry Andric}
460fe6060f1SDimitry Andric
461fe6060f1SDimitry Andricclass NVVM_MMA_B1OPS<list<WMMA_REGS> frags> {
462fe6060f1SDimitry Andric  list<string> ret = !cond(
463fe6060f1SDimitry Andric    !eq(frags[0].ptx_elt_type, "b1") : [".xor.popc", ".and.popc"],
464fe6060f1SDimitry Andric    true: [""]
465fe6060f1SDimitry Andric  );
466fe6060f1SDimitry Andric}
467fe6060f1SDimitry Andric
468fe6060f1SDimitry Andric// Returns true if this combination of layout/satf for MMA ops is supported;
469fe6060f1SDimitry Andric// false otherwise.
4700b57cec5SDimitry Andric// E.g.
471e8d8bef9SDimitry Andric// if NVVM_MMA_SUPPORTED<...>.ret then
4720b57cec5SDimitry Andric//   def : FOO<>; // The record will only be defined for supported ops.
4730b57cec5SDimitry Andric//
474fe6060f1SDimitry Andricclass NVVM_MMA_SUPPORTED<list<WMMA_REGS> frags, string layout_a, string layout_b, int satf> {
4750b57cec5SDimitry Andric  // MMA ops check both layouts.
476fe6060f1SDimitry Andric  string layout = layout_a # ":" # layout_b;
477fe6060f1SDimitry Andric  string a_type = frags[0].ptx_elt_type;
478fe6060f1SDimitry Andric  string b_type = frags[1].ptx_elt_type;
479fe6060f1SDimitry Andric  string c_type = frags[2].ptx_elt_type;
480fe6060f1SDimitry Andric  string d_type = frags[3].ptx_elt_type;
481fe6060f1SDimitry Andric  string geom = frags[0].geom;
482480093f4SDimitry Andric
483480093f4SDimitry Andric  // gcd is a shortcut used to identify instructions that depend on
484fe6060f1SDimitry Andric  // geom+frag_c+frag_d.
485fe6060f1SDimitry Andric  string gcd = geom # ":" # c_type # d_type;
486e8d8bef9SDimitry Andric  bit ret = !cond(
487480093f4SDimitry Andric
488fe6060f1SDimitry Andric    // Limit satf to valid types
489fe6060f1SDimitry Andric    !and(!eq(satf, 1),
490fe6060f1SDimitry Andric         !ne(a_type, "s8"),
491fe6060f1SDimitry Andric         !ne(a_type, "u8"),
492fe6060f1SDimitry Andric         !ne(a_type, "s4"),
493fe6060f1SDimitry Andric         !ne(a_type, "u4")): false,
494fe6060f1SDimitry Andric
495fe6060f1SDimitry Andric    // m8n8k4 has no C=f32 D=f16 variant.
496e8d8bef9SDimitry Andric    !eq(gcd, "m8n8k4:f32f16"): false,
497fe6060f1SDimitry Andric
498fe6060f1SDimitry Andric    // only m8n8k4 for f16 does not require row:col layout
499fe6060f1SDimitry Andric    !and(!ne(layout, "row:col"),
500fe6060f1SDimitry Andric         !or(!ne(geom, "m8n8k4"),
501fe6060f1SDimitry Andric             !ne(a_type, "f16"))) : false,
502fe6060f1SDimitry Andric
503fe6060f1SDimitry Andric    // m16n8k8 requires A and B to be the same type and C and D to be the same
504fe6060f1SDimitry Andric    // type.
505fe6060f1SDimitry Andric    !and(!eq(geom, "m16n8k8"),
506fe6060f1SDimitry Andric         !or(!ne(a_type, b_type),
507fe6060f1SDimitry Andric             !ne(c_type, d_type))): false,
508fe6060f1SDimitry Andric
509fe6060f1SDimitry Andric    // m16n8k8 requires C and D to be the same type.
510fe6060f1SDimitry Andric    !and(!eq(geom, "m16n8k8"),
511fe6060f1SDimitry Andric         !ne(c_type, d_type)): false,
512fe6060f1SDimitry Andric
513fe6060f1SDimitry Andric    // All other are OK.
514e8d8bef9SDimitry Andric    true: true
5150b57cec5SDimitry Andric  );
5160b57cec5SDimitry Andric}
5170b57cec5SDimitry Andric
518349cc55cSDimitry Andric// Returns true if the fragment is valid for ldmatrix ops is supported;
519349cc55cSDimitry Andric// false otherwise.
520349cc55cSDimitry Andric// E.g.
521349cc55cSDimitry Andric// if NVVM_LDMATRIX_SUPPORTED<...>.ret then
522349cc55cSDimitry Andric//   def : FOO<>; // The record will only be defined for supported ops.
523349cc55cSDimitry Andric//
524349cc55cSDimitry Andricclass NVVM_LDMATRIX_SUPPORTED<WMMA_REGS frag> {
525349cc55cSDimitry Andric  string g = frag.geom;
526349cc55cSDimitry Andric  string t = frag.ptx_elt_type;
527349cc55cSDimitry Andric
528349cc55cSDimitry Andric  bit ret = !cond(
529349cc55cSDimitry Andric    // Only currently support m8n8 and b16
530349cc55cSDimitry Andric    !and(!eq(g, "m8n8"), !eq(t, "b16")): true,
531349cc55cSDimitry Andric    true: false
532349cc55cSDimitry Andric  );
533349cc55cSDimitry Andric}
534349cc55cSDimitry Andric
5358bcb0991SDimitry Andricclass SHFL_INFO<bit sync, string mode, string type, bit return_pred> {
5368bcb0991SDimitry Andric  string Suffix = !if(sync, "sync_", "")
5378bcb0991SDimitry Andric                  # mode # "_"
5388bcb0991SDimitry Andric                  # type
5398bcb0991SDimitry Andric                  # !if(return_pred, "p", "");
5408bcb0991SDimitry Andric
5418bcb0991SDimitry Andric  string Name = "int_nvvm_shfl_" # Suffix;
5428bcb0991SDimitry Andric  string Builtin = "__nvvm_shfl_" # Suffix;
5438bcb0991SDimitry Andric  string IntrName = "llvm.nvvm.shfl." # !subst("_",".", Suffix);
544e8d8bef9SDimitry Andric  bit withGccBuiltin = !not(return_pred);
545e8d8bef9SDimitry Andric  bit withoutGccBuiltin = return_pred;
5468bcb0991SDimitry Andric  LLVMType OpType = !cond(
5478bcb0991SDimitry Andric    !eq(type,"i32"): llvm_i32_ty,
5488bcb0991SDimitry Andric    !eq(type,"f32"): llvm_float_ty);
5498bcb0991SDimitry Andric  list<LLVMType> RetTy = !if(return_pred, [OpType, llvm_i1_ty], [OpType]);
5508bcb0991SDimitry Andric  list<LLVMType> ArgsTy = !if(sync,
5518bcb0991SDimitry Andric    [llvm_i32_ty, OpType, llvm_i32_ty, llvm_i32_ty],
5528bcb0991SDimitry Andric    [OpType, llvm_i32_ty, llvm_i32_ty]);
5538bcb0991SDimitry Andric}
5548bcb0991SDimitry Andric
5550b57cec5SDimitry Andriclet TargetPrefix = "nvvm" in {
55681ad6265SDimitry Andric  def int_nvvm_prmt : ClangBuiltin<"__nvvm_prmt">,
557349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
55881ad6265SDimitry Andric        [IntrNoMem, IntrSpeculatable]>;
5590b57cec5SDimitry Andric
5600b57cec5SDimitry Andric//
5610b57cec5SDimitry Andric// Min Max
5620b57cec5SDimitry Andric//
5630b57cec5SDimitry Andric
56481ad6265SDimitry Andric  foreach operation = ["min", "max"] in {
56581ad6265SDimitry Andric    def int_nvvm_f # operation # _d :
56681ad6265SDimitry Andric      ClangBuiltin<!strconcat("__nvvm_f", operation, "_d")>,
567349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
568349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
56981ad6265SDimitry Andric
57081ad6265SDimitry Andric    foreach variant = ["_f", "_ftz_f", "_nan_f", "_ftz_nan_f",
57181ad6265SDimitry Andric      "_xorsign_abs_f", "_ftz_xorsign_abs_f", "_nan_xorsign_abs_f",
57281ad6265SDimitry Andric      "_ftz_nan_xorsign_abs_f"] in {
57381ad6265SDimitry Andric      def int_nvvm_f # operation # variant :
57481ad6265SDimitry Andric        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
57581ad6265SDimitry Andric        DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
576349cc55cSDimitry Andric          [IntrNoMem, IntrSpeculatable, Commutative]>;
57781ad6265SDimitry Andric    }
57881ad6265SDimitry Andric
57981ad6265SDimitry Andric    foreach variant = ["_f16", "_ftz_f16", "_nan_f16", "_ftz_nan_f16",
58081ad6265SDimitry Andric      "_xorsign_abs_f16", "_ftz_xorsign_abs_f16", "_nan_xorsign_abs_f16",
58181ad6265SDimitry Andric      "_ftz_nan_xorsign_abs_f16"] in {
58281ad6265SDimitry Andric      def int_nvvm_f # operation # variant :
58381ad6265SDimitry Andric        DefaultAttrsIntrinsic<[llvm_half_ty], [llvm_half_ty, llvm_half_ty],
58481ad6265SDimitry Andric          [IntrNoMem, IntrSpeculatable, Commutative]>;
58581ad6265SDimitry Andric    }
58681ad6265SDimitry Andric
58781ad6265SDimitry Andric    foreach variant = ["_f16x2", "_ftz_f16x2", "_nan_f16x2",
58881ad6265SDimitry Andric      "_ftz_nan_f16x2", "_xorsign_abs_f16x2", "_ftz_xorsign_abs_f16x2",
58981ad6265SDimitry Andric      "_nan_xorsign_abs_f16x2", "_ftz_nan_xorsign_abs_f16x2"] in {
59081ad6265SDimitry Andric      def int_nvvm_f # operation # variant :
59181ad6265SDimitry Andric        DefaultAttrsIntrinsic<[llvm_v2f16_ty], [llvm_v2f16_ty, llvm_v2f16_ty],
59281ad6265SDimitry Andric          [IntrNoMem, IntrSpeculatable, Commutative]>;
59381ad6265SDimitry Andric    }
59481ad6265SDimitry Andric
59506c3fb27SDimitry Andric    foreach variant = ["_bf16", "_ftz_bf16", "_nan_bf16", "_ftz_nan_bf16",
59606c3fb27SDimitry Andric      "_xorsign_abs_bf16", "_ftz_xorsign_abs_bf16", "_nan_xorsign_abs_bf16",
59706c3fb27SDimitry Andric      "_ftz_nan_xorsign_abs_bf16"] in {
59881ad6265SDimitry Andric      def int_nvvm_f # operation # variant :
59981ad6265SDimitry Andric        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
60006c3fb27SDimitry Andric        DefaultAttrsIntrinsic<[llvm_bfloat_ty], [llvm_bfloat_ty, llvm_bfloat_ty],
60181ad6265SDimitry Andric          [IntrNoMem, IntrSpeculatable, Commutative]>;
60281ad6265SDimitry Andric    }
60381ad6265SDimitry Andric
60406c3fb27SDimitry Andric    foreach variant = ["_bf16x2", "_ftz_bf16x2", "_nan_bf16x2",
60506c3fb27SDimitry Andric      "_ftz_nan_bf16x2", "_xorsign_abs_bf16x2", "_ftz_xorsign_abs_bf16x2",
60606c3fb27SDimitry Andric      "_nan_xorsign_abs_bf16x2", "_ftz_nan_xorsign_abs_bf16x2"]  in {
60781ad6265SDimitry Andric      def int_nvvm_f # operation # variant :
60881ad6265SDimitry Andric        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
60906c3fb27SDimitry Andric        DefaultAttrsIntrinsic<[llvm_v2bf16_ty], [llvm_v2bf16_ty, llvm_v2bf16_ty],
61081ad6265SDimitry Andric          [IntrNoMem, IntrSpeculatable, Commutative]>;
61181ad6265SDimitry Andric    }
61281ad6265SDimitry Andric  }
6130b57cec5SDimitry Andric
6140b57cec5SDimitry Andric//
6150b57cec5SDimitry Andric// Multiplication
6160b57cec5SDimitry Andric//
6170b57cec5SDimitry Andric
6187a6dacacSDimitry Andric  def int_nvvm_mulhi_s : ClangBuiltin<"__nvvm_mulhi_s">,
6197a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
6207a6dacacSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6217a6dacacSDimitry Andric  def int_nvvm_mulhi_us : ClangBuiltin<"__nvvm_mulhi_us">,
6227a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
6237a6dacacSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6247a6dacacSDimitry Andric
62581ad6265SDimitry Andric  def int_nvvm_mulhi_i : ClangBuiltin<"__nvvm_mulhi_i">,
626349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
627349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
62881ad6265SDimitry Andric  def int_nvvm_mulhi_ui : ClangBuiltin<"__nvvm_mulhi_ui">,
629349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
630349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6310b57cec5SDimitry Andric
63281ad6265SDimitry Andric  def int_nvvm_mulhi_ll : ClangBuiltin<"__nvvm_mulhi_ll">,
633349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
634349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
63581ad6265SDimitry Andric  def int_nvvm_mulhi_ull : ClangBuiltin<"__nvvm_mulhi_ull">,
636349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
637349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6380b57cec5SDimitry Andric
63981ad6265SDimitry Andric  def int_nvvm_mul_rn_ftz_f : ClangBuiltin<"__nvvm_mul_rn_ftz_f">,
640349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
641349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
64281ad6265SDimitry Andric  def int_nvvm_mul_rn_f : ClangBuiltin<"__nvvm_mul_rn_f">,
643349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
644349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
64581ad6265SDimitry Andric  def int_nvvm_mul_rz_ftz_f : ClangBuiltin<"__nvvm_mul_rz_ftz_f">,
646349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
647349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
64881ad6265SDimitry Andric  def int_nvvm_mul_rz_f : ClangBuiltin<"__nvvm_mul_rz_f">,
649349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
650349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
65181ad6265SDimitry Andric  def int_nvvm_mul_rm_ftz_f : ClangBuiltin<"__nvvm_mul_rm_ftz_f">,
652349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
653349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
65481ad6265SDimitry Andric  def int_nvvm_mul_rm_f : ClangBuiltin<"__nvvm_mul_rm_f">,
655349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
656349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
65781ad6265SDimitry Andric  def int_nvvm_mul_rp_ftz_f : ClangBuiltin<"__nvvm_mul_rp_ftz_f">,
658349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
659349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
66081ad6265SDimitry Andric  def int_nvvm_mul_rp_f : ClangBuiltin<"__nvvm_mul_rp_f">,
661349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
662349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6630b57cec5SDimitry Andric
66481ad6265SDimitry Andric  def int_nvvm_mul_rn_d : ClangBuiltin<"__nvvm_mul_rn_d">,
665349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
666349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
66781ad6265SDimitry Andric  def int_nvvm_mul_rz_d : ClangBuiltin<"__nvvm_mul_rz_d">,
668349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
669349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
67081ad6265SDimitry Andric  def int_nvvm_mul_rm_d : ClangBuiltin<"__nvvm_mul_rm_d">,
671349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
672349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
67381ad6265SDimitry Andric  def int_nvvm_mul_rp_d : ClangBuiltin<"__nvvm_mul_rp_d">,
674349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
675349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6760b57cec5SDimitry Andric
67781ad6265SDimitry Andric  def int_nvvm_mul24_i : ClangBuiltin<"__nvvm_mul24_i">,
678349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
679349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
68081ad6265SDimitry Andric  def int_nvvm_mul24_ui : ClangBuiltin<"__nvvm_mul24_ui">,
681349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
682349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
6830b57cec5SDimitry Andric
6840b57cec5SDimitry Andric//
6850b57cec5SDimitry Andric// Div
6860b57cec5SDimitry Andric//
6870b57cec5SDimitry Andric
68881ad6265SDimitry Andric  def int_nvvm_div_approx_ftz_f : ClangBuiltin<"__nvvm_div_approx_ftz_f">,
689349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
690349cc55cSDimitry Andric        [IntrNoMem]>;
69181ad6265SDimitry Andric  def int_nvvm_div_approx_f : ClangBuiltin<"__nvvm_div_approx_f">,
692349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
693349cc55cSDimitry Andric        [IntrNoMem]>;
6940b57cec5SDimitry Andric
69581ad6265SDimitry Andric  def int_nvvm_div_rn_ftz_f : ClangBuiltin<"__nvvm_div_rn_ftz_f">,
696349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
697349cc55cSDimitry Andric        [IntrNoMem]>;
69881ad6265SDimitry Andric  def int_nvvm_div_rn_f : ClangBuiltin<"__nvvm_div_rn_f">,
699349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
700349cc55cSDimitry Andric        [IntrNoMem]>;
7010b57cec5SDimitry Andric
70281ad6265SDimitry Andric  def int_nvvm_div_rz_ftz_f : ClangBuiltin<"__nvvm_div_rz_ftz_f">,
703349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
704349cc55cSDimitry Andric        [IntrNoMem]>;
70581ad6265SDimitry Andric  def int_nvvm_div_rz_f : ClangBuiltin<"__nvvm_div_rz_f">,
706349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
707349cc55cSDimitry Andric        [IntrNoMem]>;
7080b57cec5SDimitry Andric
70981ad6265SDimitry Andric  def int_nvvm_div_rm_ftz_f : ClangBuiltin<"__nvvm_div_rm_ftz_f">,
710349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
711349cc55cSDimitry Andric        [IntrNoMem]>;
71281ad6265SDimitry Andric  def int_nvvm_div_rm_f : ClangBuiltin<"__nvvm_div_rm_f">,
713349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
714349cc55cSDimitry Andric        [IntrNoMem]>;
7150b57cec5SDimitry Andric
71681ad6265SDimitry Andric  def int_nvvm_div_rp_ftz_f : ClangBuiltin<"__nvvm_div_rp_ftz_f">,
717349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
718349cc55cSDimitry Andric        [IntrNoMem]>;
71981ad6265SDimitry Andric  def int_nvvm_div_rp_f : ClangBuiltin<"__nvvm_div_rp_f">,
720349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
721349cc55cSDimitry Andric        [IntrNoMem]>;
7220b57cec5SDimitry Andric
72381ad6265SDimitry Andric  def int_nvvm_div_rn_d : ClangBuiltin<"__nvvm_div_rn_d">,
724349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
725349cc55cSDimitry Andric        [IntrNoMem]>;
72681ad6265SDimitry Andric  def int_nvvm_div_rz_d : ClangBuiltin<"__nvvm_div_rz_d">,
727349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
728349cc55cSDimitry Andric        [IntrNoMem]>;
72981ad6265SDimitry Andric  def int_nvvm_div_rm_d : ClangBuiltin<"__nvvm_div_rm_d">,
730349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
731349cc55cSDimitry Andric        [IntrNoMem]>;
73281ad6265SDimitry Andric  def int_nvvm_div_rp_d : ClangBuiltin<"__nvvm_div_rp_d">,
733349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
734349cc55cSDimitry Andric        [IntrNoMem]>;
7350b57cec5SDimitry Andric
7360b57cec5SDimitry Andric//
7370b57cec5SDimitry Andric// Sad
7380b57cec5SDimitry Andric//
7390b57cec5SDimitry Andric
7407a6dacacSDimitry Andric  def int_nvvm_sad_s : ClangBuiltin<"__nvvm_sad_s">,
7417a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
7427a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
7437a6dacacSDimitry Andric  def int_nvvm_sad_us : ClangBuiltin<"__nvvm_sad_us">,
7447a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
7457a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
7467a6dacacSDimitry Andric
74781ad6265SDimitry Andric  def int_nvvm_sad_i : ClangBuiltin<"__nvvm_sad_i">,
748349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
7497a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
75081ad6265SDimitry Andric  def int_nvvm_sad_ui : ClangBuiltin<"__nvvm_sad_ui">,
751349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
7527a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
7537a6dacacSDimitry Andric
7547a6dacacSDimitry Andric  def int_nvvm_sad_ll : ClangBuiltin<"__nvvm_sad_ll">,
7557a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty],
7567a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
7577a6dacacSDimitry Andric  def int_nvvm_sad_ull : ClangBuiltin<"__nvvm_sad_ull">,
7587a6dacacSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty],
7597a6dacacSDimitry Andric        [IntrNoMem, Commutative, IntrSpeculatable]>;
7607a6dacacSDimitry Andric
7610b57cec5SDimitry Andric
7620b57cec5SDimitry Andric//
7630b57cec5SDimitry Andric// Floor  Ceil
7640b57cec5SDimitry Andric//
7650b57cec5SDimitry Andric
76681ad6265SDimitry Andric  def int_nvvm_floor_ftz_f : ClangBuiltin<"__nvvm_floor_ftz_f">,
767349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
76881ad6265SDimitry Andric  def int_nvvm_floor_f : ClangBuiltin<"__nvvm_floor_f">,
769349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
77081ad6265SDimitry Andric  def int_nvvm_floor_d : ClangBuiltin<"__nvvm_floor_d">,
771349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
7720b57cec5SDimitry Andric
77381ad6265SDimitry Andric  def int_nvvm_ceil_ftz_f : ClangBuiltin<"__nvvm_ceil_ftz_f">,
774349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
77581ad6265SDimitry Andric  def int_nvvm_ceil_f : ClangBuiltin<"__nvvm_ceil_f">,
776349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
77781ad6265SDimitry Andric  def int_nvvm_ceil_d : ClangBuiltin<"__nvvm_ceil_d">,
778349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
7790b57cec5SDimitry Andric
7800b57cec5SDimitry Andric//
7810b57cec5SDimitry Andric// Abs
7820b57cec5SDimitry Andric//
7830b57cec5SDimitry Andric
78481ad6265SDimitry Andric  def int_nvvm_fabs_ftz_f : ClangBuiltin<"__nvvm_fabs_ftz_f">,
785349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
78681ad6265SDimitry Andric  def int_nvvm_fabs_f : ClangBuiltin<"__nvvm_fabs_f">,
787349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
78881ad6265SDimitry Andric  def int_nvvm_fabs_d : ClangBuiltin<"__nvvm_fabs_d">,
789349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
7900b57cec5SDimitry Andric
7910b57cec5SDimitry Andric//
79281ad6265SDimitry Andric// Abs, Neg bf16, bf16x2
79381ad6265SDimitry Andric//
79481ad6265SDimitry Andric
79581ad6265SDimitry Andric  foreach unary = ["abs", "neg"] in {
79681ad6265SDimitry Andric    def int_nvvm_ # unary # _bf16 :
79781ad6265SDimitry Andric      ClangBuiltin<!strconcat("__nvvm_", unary, "_bf16")>,
79806c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_bfloat_ty], [llvm_bfloat_ty], [IntrNoMem]>;
79981ad6265SDimitry Andric    def int_nvvm_ # unary # _bf16x2 :
80081ad6265SDimitry Andric      ClangBuiltin<!strconcat("__nvvm_", unary, "_bf16x2")>,
80106c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_v2bf16_ty], [llvm_v2bf16_ty], [IntrNoMem]>;
80281ad6265SDimitry Andric  }
80381ad6265SDimitry Andric
80481ad6265SDimitry Andric//
8050b57cec5SDimitry Andric// Round
8060b57cec5SDimitry Andric//
8070b57cec5SDimitry Andric
80881ad6265SDimitry Andric  def int_nvvm_round_ftz_f : ClangBuiltin<"__nvvm_round_ftz_f">,
809349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
81081ad6265SDimitry Andric  def int_nvvm_round_f : ClangBuiltin<"__nvvm_round_f">,
811349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
8120b57cec5SDimitry Andric
81381ad6265SDimitry Andric  def int_nvvm_round_d : ClangBuiltin<"__nvvm_round_d">,
814349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
8150b57cec5SDimitry Andric
8160b57cec5SDimitry Andric//
8170b57cec5SDimitry Andric// Trunc
8180b57cec5SDimitry Andric//
8190b57cec5SDimitry Andric
82081ad6265SDimitry Andric  def int_nvvm_trunc_ftz_f : ClangBuiltin<"__nvvm_trunc_ftz_f">,
821349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
82281ad6265SDimitry Andric  def int_nvvm_trunc_f : ClangBuiltin<"__nvvm_trunc_f">,
823349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
8240b57cec5SDimitry Andric
82581ad6265SDimitry Andric  def int_nvvm_trunc_d : ClangBuiltin<"__nvvm_trunc_d">,
826349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
8270b57cec5SDimitry Andric
8280b57cec5SDimitry Andric//
8290b57cec5SDimitry Andric// Saturate
8300b57cec5SDimitry Andric//
8310b57cec5SDimitry Andric
83281ad6265SDimitry Andric  def int_nvvm_saturate_ftz_f : ClangBuiltin<"__nvvm_saturate_ftz_f">,
833349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
83481ad6265SDimitry Andric  def int_nvvm_saturate_f : ClangBuiltin<"__nvvm_saturate_f">,
835349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
8360b57cec5SDimitry Andric
83781ad6265SDimitry Andric  def int_nvvm_saturate_d : ClangBuiltin<"__nvvm_saturate_d">,
838349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
8390b57cec5SDimitry Andric
8400b57cec5SDimitry Andric//
8410b57cec5SDimitry Andric// Exp2  Log2
8420b57cec5SDimitry Andric//
8430b57cec5SDimitry Andric
84481ad6265SDimitry Andric  def int_nvvm_ex2_approx_ftz_f : ClangBuiltin<"__nvvm_ex2_approx_ftz_f">,
845349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
84681ad6265SDimitry Andric  def int_nvvm_ex2_approx_f : ClangBuiltin<"__nvvm_ex2_approx_f">,
847349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
84881ad6265SDimitry Andric  def int_nvvm_ex2_approx_d : ClangBuiltin<"__nvvm_ex2_approx_d">,
849349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
85006c3fb27SDimitry Andric  def int_nvvm_ex2_approx_f16 :
85181ad6265SDimitry Andric      DefaultAttrsIntrinsic<[llvm_half_ty], [llvm_half_ty], [IntrNoMem]>;
85206c3fb27SDimitry Andric  def int_nvvm_ex2_approx_f16x2 :
85381ad6265SDimitry Andric      DefaultAttrsIntrinsic<[llvm_v2f16_ty], [llvm_v2f16_ty], [IntrNoMem]>;
8540b57cec5SDimitry Andric
85581ad6265SDimitry Andric  def int_nvvm_lg2_approx_ftz_f : ClangBuiltin<"__nvvm_lg2_approx_ftz_f">,
856349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
85781ad6265SDimitry Andric  def int_nvvm_lg2_approx_f : ClangBuiltin<"__nvvm_lg2_approx_f">,
858349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
85981ad6265SDimitry Andric  def int_nvvm_lg2_approx_d : ClangBuiltin<"__nvvm_lg2_approx_d">,
860349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
8610b57cec5SDimitry Andric
8620b57cec5SDimitry Andric//
8630b57cec5SDimitry Andric// Sin  Cos
8640b57cec5SDimitry Andric//
8650b57cec5SDimitry Andric
86681ad6265SDimitry Andric  def int_nvvm_sin_approx_ftz_f : ClangBuiltin<"__nvvm_sin_approx_ftz_f">,
867349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
86881ad6265SDimitry Andric  def int_nvvm_sin_approx_f : ClangBuiltin<"__nvvm_sin_approx_f">,
869349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
8700b57cec5SDimitry Andric
87181ad6265SDimitry Andric  def int_nvvm_cos_approx_ftz_f : ClangBuiltin<"__nvvm_cos_approx_ftz_f">,
872349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
87381ad6265SDimitry Andric  def int_nvvm_cos_approx_f : ClangBuiltin<"__nvvm_cos_approx_f">,
874349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
8750b57cec5SDimitry Andric
8760b57cec5SDimitry Andric//
8770b57cec5SDimitry Andric// Fma
8780b57cec5SDimitry Andric//
8790b57cec5SDimitry Andric
88081ad6265SDimitry Andric  foreach variant = ["_rn_f16", "_rn_ftz_f16", "_rn_sat_f16",
88181ad6265SDimitry Andric    "_rn_ftz_sat_f16", "_rn_relu_f16", "_rn_ftz_relu_f16"] in {
88206c3fb27SDimitry Andric    def int_nvvm_fma # variant : DefaultAttrsIntrinsic<[llvm_half_ty],
88381ad6265SDimitry Andric      [llvm_half_ty, llvm_half_ty, llvm_half_ty],
884349cc55cSDimitry Andric      [IntrNoMem, IntrSpeculatable]>;
88581ad6265SDimitry Andric  }
8860b57cec5SDimitry Andric
88781ad6265SDimitry Andric  foreach variant = ["_rn_f16x2", "_rn_ftz_f16x2", "_rn_sat_f16x2",
88881ad6265SDimitry Andric    "_rn_ftz_sat_f16x2", "_rn_relu_f16x2", "_rn_ftz_relu_f16x2"] in {
88906c3fb27SDimitry Andric    def int_nvvm_fma # variant : DefaultAttrsIntrinsic<[llvm_v2f16_ty],
89081ad6265SDimitry Andric      [llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty],
89181ad6265SDimitry Andric      [IntrNoMem, IntrSpeculatable]>;
89281ad6265SDimitry Andric  }
89381ad6265SDimitry Andric
89406c3fb27SDimitry Andric  foreach variant = ["_rn_bf16", "_rn_ftz_bf16", "_rn_sat_bf16",
89506c3fb27SDimitry Andric    "_rn_ftz_sat_bf16", "_rn_relu_bf16", "_rn_ftz_relu_bf16"] in {
89681ad6265SDimitry Andric    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
89706c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_bfloat_ty],
89806c3fb27SDimitry Andric        [llvm_bfloat_ty, llvm_bfloat_ty, llvm_bfloat_ty],
89981ad6265SDimitry Andric        [IntrNoMem, IntrSpeculatable]>;
90081ad6265SDimitry Andric  }
90181ad6265SDimitry Andric
90206c3fb27SDimitry Andric  foreach variant = ["_rn_bf16x2", "_rn_ftz_bf16x2", "_rn_sat_bf16x2",
90306c3fb27SDimitry Andric    "_rn_ftz_sat_bf16x2", "_rn_relu_bf16x2", "_rn_ftz_relu_bf16x2"] in {
90481ad6265SDimitry Andric    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
90506c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_v2bf16_ty],
90606c3fb27SDimitry Andric        [llvm_v2bf16_ty, llvm_v2bf16_ty, llvm_v2bf16_ty],
90781ad6265SDimitry Andric        [IntrNoMem, IntrSpeculatable]>;
90881ad6265SDimitry Andric  }
90981ad6265SDimitry Andric
91081ad6265SDimitry Andric  foreach variant = ["_rn_ftz_f", "_rn_f", "_rz_ftz_f", "_rz_f", "_rm_ftz_f",
91181ad6265SDimitry Andric    "_rm_f", "_rp_ftz_f", "_rp_f"] in {
91281ad6265SDimitry Andric    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
91381ad6265SDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty],
91481ad6265SDimitry Andric        [llvm_float_ty, llvm_float_ty, llvm_float_ty],
91581ad6265SDimitry Andric        [IntrNoMem, IntrSpeculatable]>;
91681ad6265SDimitry Andric  }
91781ad6265SDimitry Andric
91881ad6265SDimitry Andric  foreach variant = ["_rn_d", "_rz_d", "_rm_d", "_rp_d"] in {
91981ad6265SDimitry Andric    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
920349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty],
9210b57cec5SDimitry Andric        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
922349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable]>;
92381ad6265SDimitry Andric  }
9240b57cec5SDimitry Andric
9250b57cec5SDimitry Andric//
9260b57cec5SDimitry Andric// Rcp
9270b57cec5SDimitry Andric//
9280b57cec5SDimitry Andric
92981ad6265SDimitry Andric  def int_nvvm_rcp_rn_ftz_f : ClangBuiltin<"__nvvm_rcp_rn_ftz_f">,
930349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
93181ad6265SDimitry Andric  def int_nvvm_rcp_rn_f : ClangBuiltin<"__nvvm_rcp_rn_f">,
932349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
93381ad6265SDimitry Andric  def int_nvvm_rcp_rz_ftz_f : ClangBuiltin<"__nvvm_rcp_rz_ftz_f">,
934349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
93581ad6265SDimitry Andric  def int_nvvm_rcp_rz_f : ClangBuiltin<"__nvvm_rcp_rz_f">,
936349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
93781ad6265SDimitry Andric  def int_nvvm_rcp_rm_ftz_f : ClangBuiltin<"__nvvm_rcp_rm_ftz_f">,
938349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
93981ad6265SDimitry Andric  def int_nvvm_rcp_rm_f : ClangBuiltin<"__nvvm_rcp_rm_f">,
940349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
94181ad6265SDimitry Andric  def int_nvvm_rcp_rp_ftz_f : ClangBuiltin<"__nvvm_rcp_rp_ftz_f">,
942349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
94381ad6265SDimitry Andric  def int_nvvm_rcp_rp_f : ClangBuiltin<"__nvvm_rcp_rp_f">,
944349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
9450b57cec5SDimitry Andric
94681ad6265SDimitry Andric  def int_nvvm_rcp_rn_d : ClangBuiltin<"__nvvm_rcp_rn_d">,
947349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
94881ad6265SDimitry Andric  def int_nvvm_rcp_rz_d : ClangBuiltin<"__nvvm_rcp_rz_d">,
949349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
95081ad6265SDimitry Andric  def int_nvvm_rcp_rm_d : ClangBuiltin<"__nvvm_rcp_rm_d">,
951349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
95281ad6265SDimitry Andric  def int_nvvm_rcp_rp_d : ClangBuiltin<"__nvvm_rcp_rp_d">,
953349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
9540b57cec5SDimitry Andric
95581ad6265SDimitry Andric  def int_nvvm_rcp_approx_ftz_f : ClangBuiltin<"__nvvm_rcp_approx_ftz_f">,
95681ad6265SDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
95781ad6265SDimitry Andric  def int_nvvm_rcp_approx_ftz_d : ClangBuiltin<"__nvvm_rcp_approx_ftz_d">,
958349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
9590b57cec5SDimitry Andric
9600b57cec5SDimitry Andric//
9610b57cec5SDimitry Andric// Sqrt
9620b57cec5SDimitry Andric//
9630b57cec5SDimitry Andric
96481ad6265SDimitry Andric  def int_nvvm_sqrt_f : ClangBuiltin<"__nvvm_sqrt_f">,
965349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
96681ad6265SDimitry Andric  def int_nvvm_sqrt_rn_ftz_f : ClangBuiltin<"__nvvm_sqrt_rn_ftz_f">,
967349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
96881ad6265SDimitry Andric  def int_nvvm_sqrt_rn_f : ClangBuiltin<"__nvvm_sqrt_rn_f">,
969349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
97081ad6265SDimitry Andric  def int_nvvm_sqrt_rz_ftz_f : ClangBuiltin<"__nvvm_sqrt_rz_ftz_f">,
971349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
97281ad6265SDimitry Andric  def int_nvvm_sqrt_rz_f : ClangBuiltin<"__nvvm_sqrt_rz_f">,
973349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
97481ad6265SDimitry Andric  def int_nvvm_sqrt_rm_ftz_f : ClangBuiltin<"__nvvm_sqrt_rm_ftz_f">,
975349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
97681ad6265SDimitry Andric  def int_nvvm_sqrt_rm_f : ClangBuiltin<"__nvvm_sqrt_rm_f">,
977349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
97881ad6265SDimitry Andric  def int_nvvm_sqrt_rp_ftz_f : ClangBuiltin<"__nvvm_sqrt_rp_ftz_f">,
979349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
98081ad6265SDimitry Andric  def int_nvvm_sqrt_rp_f : ClangBuiltin<"__nvvm_sqrt_rp_f">,
981349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
98281ad6265SDimitry Andric  def int_nvvm_sqrt_approx_ftz_f : ClangBuiltin<"__nvvm_sqrt_approx_ftz_f">,
983349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
98481ad6265SDimitry Andric  def int_nvvm_sqrt_approx_f : ClangBuiltin<"__nvvm_sqrt_approx_f">,
985349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
9860b57cec5SDimitry Andric
98781ad6265SDimitry Andric  def int_nvvm_sqrt_rn_d : ClangBuiltin<"__nvvm_sqrt_rn_d">,
988349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
98981ad6265SDimitry Andric  def int_nvvm_sqrt_rz_d : ClangBuiltin<"__nvvm_sqrt_rz_d">,
990349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
99181ad6265SDimitry Andric  def int_nvvm_sqrt_rm_d : ClangBuiltin<"__nvvm_sqrt_rm_d">,
992349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
99381ad6265SDimitry Andric  def int_nvvm_sqrt_rp_d : ClangBuiltin<"__nvvm_sqrt_rp_d">,
994349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
9950b57cec5SDimitry Andric
9960b57cec5SDimitry Andric//
9970b57cec5SDimitry Andric// Rsqrt
9980b57cec5SDimitry Andric//
9990b57cec5SDimitry Andric
100081ad6265SDimitry Andric  def int_nvvm_rsqrt_approx_ftz_f : ClangBuiltin<"__nvvm_rsqrt_approx_ftz_f">,
1001349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
100281ad6265SDimitry Andric  def int_nvvm_rsqrt_approx_f : ClangBuiltin<"__nvvm_rsqrt_approx_f">,
1003349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
100481ad6265SDimitry Andric  def int_nvvm_rsqrt_approx_d : ClangBuiltin<"__nvvm_rsqrt_approx_d">,
1005349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
10060b57cec5SDimitry Andric
10070b57cec5SDimitry Andric//
10080b57cec5SDimitry Andric// Add
10090b57cec5SDimitry Andric//
10100b57cec5SDimitry Andric
101181ad6265SDimitry Andric  def int_nvvm_add_rn_ftz_f : ClangBuiltin<"__nvvm_add_rn_ftz_f">,
1012349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1013349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
101481ad6265SDimitry Andric  def int_nvvm_add_rn_f : ClangBuiltin<"__nvvm_add_rn_f">,
1015349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1016349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
101781ad6265SDimitry Andric  def int_nvvm_add_rz_ftz_f : ClangBuiltin<"__nvvm_add_rz_ftz_f">,
1018349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1019349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
102081ad6265SDimitry Andric  def int_nvvm_add_rz_f : ClangBuiltin<"__nvvm_add_rz_f">,
1021349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1022349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
102381ad6265SDimitry Andric  def int_nvvm_add_rm_ftz_f : ClangBuiltin<"__nvvm_add_rm_ftz_f">,
1024349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1025349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
102681ad6265SDimitry Andric  def int_nvvm_add_rm_f : ClangBuiltin<"__nvvm_add_rm_f">,
1027349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1028349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
102981ad6265SDimitry Andric  def int_nvvm_add_rp_ftz_f : ClangBuiltin<"__nvvm_add_rp_ftz_f">,
1030349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1031349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
103281ad6265SDimitry Andric  def int_nvvm_add_rp_f : ClangBuiltin<"__nvvm_add_rp_f">,
1033349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1034349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
10350b57cec5SDimitry Andric
103681ad6265SDimitry Andric  def int_nvvm_add_rn_d : ClangBuiltin<"__nvvm_add_rn_d">,
1037349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1038349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
103981ad6265SDimitry Andric  def int_nvvm_add_rz_d : ClangBuiltin<"__nvvm_add_rz_d">,
1040349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1041349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
104281ad6265SDimitry Andric  def int_nvvm_add_rm_d : ClangBuiltin<"__nvvm_add_rm_d">,
1043349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1044349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
104581ad6265SDimitry Andric  def int_nvvm_add_rp_d : ClangBuiltin<"__nvvm_add_rp_d">,
1046349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1047349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
10480b57cec5SDimitry Andric
10490b57cec5SDimitry Andric//
10500b57cec5SDimitry Andric// Convert
10510b57cec5SDimitry Andric//
10520b57cec5SDimitry Andric
105381ad6265SDimitry Andric  def int_nvvm_d2f_rn_ftz : ClangBuiltin<"__nvvm_d2f_rn_ftz">,
1054349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
105581ad6265SDimitry Andric  def int_nvvm_d2f_rn : ClangBuiltin<"__nvvm_d2f_rn">,
1056349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
105781ad6265SDimitry Andric  def int_nvvm_d2f_rz_ftz : ClangBuiltin<"__nvvm_d2f_rz_ftz">,
1058349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
105981ad6265SDimitry Andric  def int_nvvm_d2f_rz : ClangBuiltin<"__nvvm_d2f_rz">,
1060349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
106181ad6265SDimitry Andric  def int_nvvm_d2f_rm_ftz : ClangBuiltin<"__nvvm_d2f_rm_ftz">,
1062349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
106381ad6265SDimitry Andric  def int_nvvm_d2f_rm : ClangBuiltin<"__nvvm_d2f_rm">,
1064349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
106581ad6265SDimitry Andric  def int_nvvm_d2f_rp_ftz : ClangBuiltin<"__nvvm_d2f_rp_ftz">,
1066349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
106781ad6265SDimitry Andric  def int_nvvm_d2f_rp : ClangBuiltin<"__nvvm_d2f_rp">,
1068349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
10690b57cec5SDimitry Andric
107081ad6265SDimitry Andric  def int_nvvm_d2i_rn : ClangBuiltin<"__nvvm_d2i_rn">,
1071349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
107281ad6265SDimitry Andric  def int_nvvm_d2i_rz : ClangBuiltin<"__nvvm_d2i_rz">,
1073349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
107481ad6265SDimitry Andric  def int_nvvm_d2i_rm : ClangBuiltin<"__nvvm_d2i_rm">,
1075349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
107681ad6265SDimitry Andric  def int_nvvm_d2i_rp : ClangBuiltin<"__nvvm_d2i_rp">,
1077349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
10780b57cec5SDimitry Andric
107981ad6265SDimitry Andric  def int_nvvm_d2ui_rn : ClangBuiltin<"__nvvm_d2ui_rn">,
1080349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
108181ad6265SDimitry Andric  def int_nvvm_d2ui_rz : ClangBuiltin<"__nvvm_d2ui_rz">,
1082349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
108381ad6265SDimitry Andric  def int_nvvm_d2ui_rm : ClangBuiltin<"__nvvm_d2ui_rm">,
1084349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
108581ad6265SDimitry Andric  def int_nvvm_d2ui_rp : ClangBuiltin<"__nvvm_d2ui_rp">,
1086349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
10870b57cec5SDimitry Andric
108881ad6265SDimitry Andric  def int_nvvm_i2d_rn : ClangBuiltin<"__nvvm_i2d_rn">,
1089349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
109081ad6265SDimitry Andric  def int_nvvm_i2d_rz : ClangBuiltin<"__nvvm_i2d_rz">,
1091349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
109281ad6265SDimitry Andric  def int_nvvm_i2d_rm : ClangBuiltin<"__nvvm_i2d_rm">,
1093349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
109481ad6265SDimitry Andric  def int_nvvm_i2d_rp : ClangBuiltin<"__nvvm_i2d_rp">,
1095349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
10960b57cec5SDimitry Andric
109781ad6265SDimitry Andric  def int_nvvm_ui2d_rn : ClangBuiltin<"__nvvm_ui2d_rn">,
1098349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
109981ad6265SDimitry Andric  def int_nvvm_ui2d_rz : ClangBuiltin<"__nvvm_ui2d_rz">,
1100349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
110181ad6265SDimitry Andric  def int_nvvm_ui2d_rm : ClangBuiltin<"__nvvm_ui2d_rm">,
1102349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
110381ad6265SDimitry Andric  def int_nvvm_ui2d_rp : ClangBuiltin<"__nvvm_ui2d_rp">,
1104349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
11050b57cec5SDimitry Andric
110681ad6265SDimitry Andric  def int_nvvm_f2i_rn_ftz : ClangBuiltin<"__nvvm_f2i_rn_ftz">,
1107349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
110881ad6265SDimitry Andric  def int_nvvm_f2i_rn : ClangBuiltin<"__nvvm_f2i_rn">,
1109349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
111081ad6265SDimitry Andric  def int_nvvm_f2i_rz_ftz : ClangBuiltin<"__nvvm_f2i_rz_ftz">,
1111349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
111281ad6265SDimitry Andric  def int_nvvm_f2i_rz : ClangBuiltin<"__nvvm_f2i_rz">,
1113349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
111481ad6265SDimitry Andric  def int_nvvm_f2i_rm_ftz : ClangBuiltin<"__nvvm_f2i_rm_ftz">,
1115349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
111681ad6265SDimitry Andric  def int_nvvm_f2i_rm : ClangBuiltin<"__nvvm_f2i_rm">,
1117349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
111881ad6265SDimitry Andric  def int_nvvm_f2i_rp_ftz : ClangBuiltin<"__nvvm_f2i_rp_ftz">,
1119349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
112081ad6265SDimitry Andric  def int_nvvm_f2i_rp : ClangBuiltin<"__nvvm_f2i_rp">,
1121349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
11220b57cec5SDimitry Andric
112381ad6265SDimitry Andric  def int_nvvm_f2ui_rn_ftz : ClangBuiltin<"__nvvm_f2ui_rn_ftz">,
1124349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
112581ad6265SDimitry Andric  def int_nvvm_f2ui_rn : ClangBuiltin<"__nvvm_f2ui_rn">,
1126349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
112781ad6265SDimitry Andric  def int_nvvm_f2ui_rz_ftz : ClangBuiltin<"__nvvm_f2ui_rz_ftz">,
1128349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
112981ad6265SDimitry Andric  def int_nvvm_f2ui_rz : ClangBuiltin<"__nvvm_f2ui_rz">,
1130349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
113181ad6265SDimitry Andric  def int_nvvm_f2ui_rm_ftz : ClangBuiltin<"__nvvm_f2ui_rm_ftz">,
1132349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
113381ad6265SDimitry Andric  def int_nvvm_f2ui_rm : ClangBuiltin<"__nvvm_f2ui_rm">,
1134349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
113581ad6265SDimitry Andric  def int_nvvm_f2ui_rp_ftz : ClangBuiltin<"__nvvm_f2ui_rp_ftz">,
1136349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
113781ad6265SDimitry Andric  def int_nvvm_f2ui_rp : ClangBuiltin<"__nvvm_f2ui_rp">,
1138349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
11390b57cec5SDimitry Andric
114081ad6265SDimitry Andric  def int_nvvm_i2f_rn : ClangBuiltin<"__nvvm_i2f_rn">,
1141349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
114281ad6265SDimitry Andric  def int_nvvm_i2f_rz : ClangBuiltin<"__nvvm_i2f_rz">,
1143349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
114481ad6265SDimitry Andric  def int_nvvm_i2f_rm : ClangBuiltin<"__nvvm_i2f_rm">,
1145349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
114681ad6265SDimitry Andric  def int_nvvm_i2f_rp : ClangBuiltin<"__nvvm_i2f_rp">,
1147349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
11480b57cec5SDimitry Andric
114981ad6265SDimitry Andric  def int_nvvm_ui2f_rn : ClangBuiltin<"__nvvm_ui2f_rn">,
1150349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
115181ad6265SDimitry Andric  def int_nvvm_ui2f_rz : ClangBuiltin<"__nvvm_ui2f_rz">,
1152349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
115381ad6265SDimitry Andric  def int_nvvm_ui2f_rm : ClangBuiltin<"__nvvm_ui2f_rm">,
1154349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
115581ad6265SDimitry Andric  def int_nvvm_ui2f_rp : ClangBuiltin<"__nvvm_ui2f_rp">,
1156349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
11570b57cec5SDimitry Andric
115881ad6265SDimitry Andric  def int_nvvm_lohi_i2d : ClangBuiltin<"__nvvm_lohi_i2d">,
1159349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
1160349cc55cSDimitry Andric        [IntrNoMem, IntrSpeculatable, Commutative]>;
11610b57cec5SDimitry Andric
116281ad6265SDimitry Andric  def int_nvvm_d2i_lo : ClangBuiltin<"__nvvm_d2i_lo">,
1163349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
116481ad6265SDimitry Andric  def int_nvvm_d2i_hi : ClangBuiltin<"__nvvm_d2i_hi">,
1165349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
11660b57cec5SDimitry Andric
116781ad6265SDimitry Andric  def int_nvvm_f2ll_rn_ftz : ClangBuiltin<"__nvvm_f2ll_rn_ftz">,
1168349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
116981ad6265SDimitry Andric  def int_nvvm_f2ll_rn : ClangBuiltin<"__nvvm_f2ll_rn">,
1170349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
117181ad6265SDimitry Andric  def int_nvvm_f2ll_rz_ftz : ClangBuiltin<"__nvvm_f2ll_rz_ftz">,
1172349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
117381ad6265SDimitry Andric  def int_nvvm_f2ll_rz : ClangBuiltin<"__nvvm_f2ll_rz">,
1174349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
117581ad6265SDimitry Andric  def int_nvvm_f2ll_rm_ftz : ClangBuiltin<"__nvvm_f2ll_rm_ftz">,
1176349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
117781ad6265SDimitry Andric  def int_nvvm_f2ll_rm : ClangBuiltin<"__nvvm_f2ll_rm">,
1178349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
117981ad6265SDimitry Andric  def int_nvvm_f2ll_rp_ftz : ClangBuiltin<"__nvvm_f2ll_rp_ftz">,
1180349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
118181ad6265SDimitry Andric  def int_nvvm_f2ll_rp : ClangBuiltin<"__nvvm_f2ll_rp">,
1182349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
11830b57cec5SDimitry Andric
118481ad6265SDimitry Andric  def int_nvvm_f2ull_rn_ftz : ClangBuiltin<"__nvvm_f2ull_rn_ftz">,
1185349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
118681ad6265SDimitry Andric  def int_nvvm_f2ull_rn : ClangBuiltin<"__nvvm_f2ull_rn">,
1187349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
118881ad6265SDimitry Andric  def int_nvvm_f2ull_rz_ftz : ClangBuiltin<"__nvvm_f2ull_rz_ftz">,
1189349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
119081ad6265SDimitry Andric  def int_nvvm_f2ull_rz : ClangBuiltin<"__nvvm_f2ull_rz">,
1191349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
119281ad6265SDimitry Andric  def int_nvvm_f2ull_rm_ftz : ClangBuiltin<"__nvvm_f2ull_rm_ftz">,
1193349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
119481ad6265SDimitry Andric  def int_nvvm_f2ull_rm : ClangBuiltin<"__nvvm_f2ull_rm">,
1195349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
119681ad6265SDimitry Andric  def int_nvvm_f2ull_rp_ftz : ClangBuiltin<"__nvvm_f2ull_rp_ftz">,
1197349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
119881ad6265SDimitry Andric  def int_nvvm_f2ull_rp : ClangBuiltin<"__nvvm_f2ull_rp">,
1199349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
12000b57cec5SDimitry Andric
120181ad6265SDimitry Andric  def int_nvvm_d2ll_rn : ClangBuiltin<"__nvvm_d2ll_rn">,
1202349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
120381ad6265SDimitry Andric  def int_nvvm_d2ll_rz : ClangBuiltin<"__nvvm_d2ll_rz">,
1204349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
120581ad6265SDimitry Andric  def int_nvvm_d2ll_rm : ClangBuiltin<"__nvvm_d2ll_rm">,
1206349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
120781ad6265SDimitry Andric  def int_nvvm_d2ll_rp : ClangBuiltin<"__nvvm_d2ll_rp">,
1208349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
12090b57cec5SDimitry Andric
121081ad6265SDimitry Andric  def int_nvvm_d2ull_rn : ClangBuiltin<"__nvvm_d2ull_rn">,
1211349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
121281ad6265SDimitry Andric  def int_nvvm_d2ull_rz : ClangBuiltin<"__nvvm_d2ull_rz">,
1213349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
121481ad6265SDimitry Andric  def int_nvvm_d2ull_rm : ClangBuiltin<"__nvvm_d2ull_rm">,
1215349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
121681ad6265SDimitry Andric  def int_nvvm_d2ull_rp : ClangBuiltin<"__nvvm_d2ull_rp">,
1217349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
12180b57cec5SDimitry Andric
121981ad6265SDimitry Andric  def int_nvvm_ll2f_rn : ClangBuiltin<"__nvvm_ll2f_rn">,
1220349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
122181ad6265SDimitry Andric  def int_nvvm_ll2f_rz : ClangBuiltin<"__nvvm_ll2f_rz">,
1222349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
122381ad6265SDimitry Andric  def int_nvvm_ll2f_rm : ClangBuiltin<"__nvvm_ll2f_rm">,
1224349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
122581ad6265SDimitry Andric  def int_nvvm_ll2f_rp : ClangBuiltin<"__nvvm_ll2f_rp">,
1226349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
122781ad6265SDimitry Andric  def int_nvvm_ull2f_rn : ClangBuiltin<"__nvvm_ull2f_rn">,
1228349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
122981ad6265SDimitry Andric  def int_nvvm_ull2f_rz : ClangBuiltin<"__nvvm_ull2f_rz">,
1230349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
123181ad6265SDimitry Andric  def int_nvvm_ull2f_rm : ClangBuiltin<"__nvvm_ull2f_rm">,
1232349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
123381ad6265SDimitry Andric  def int_nvvm_ull2f_rp : ClangBuiltin<"__nvvm_ull2f_rp">,
1234349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
12350b57cec5SDimitry Andric
123681ad6265SDimitry Andric  def int_nvvm_ll2d_rn : ClangBuiltin<"__nvvm_ll2d_rn">,
1237349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
123881ad6265SDimitry Andric  def int_nvvm_ll2d_rz : ClangBuiltin<"__nvvm_ll2d_rz">,
1239349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
124081ad6265SDimitry Andric  def int_nvvm_ll2d_rm : ClangBuiltin<"__nvvm_ll2d_rm">,
1241349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
124281ad6265SDimitry Andric  def int_nvvm_ll2d_rp : ClangBuiltin<"__nvvm_ll2d_rp">,
1243349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
124481ad6265SDimitry Andric  def int_nvvm_ull2d_rn : ClangBuiltin<"__nvvm_ull2d_rn">,
1245349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
124681ad6265SDimitry Andric  def int_nvvm_ull2d_rz : ClangBuiltin<"__nvvm_ull2d_rz">,
1247349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
124881ad6265SDimitry Andric  def int_nvvm_ull2d_rm : ClangBuiltin<"__nvvm_ull2d_rm">,
1249349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
125081ad6265SDimitry Andric  def int_nvvm_ull2d_rp : ClangBuiltin<"__nvvm_ull2d_rp">,
1251349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
12520b57cec5SDimitry Andric
125381ad6265SDimitry Andric  def int_nvvm_f2h_rn_ftz : ClangBuiltin<"__nvvm_f2h_rn_ftz">,
1254349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
125581ad6265SDimitry Andric  def int_nvvm_f2h_rn : ClangBuiltin<"__nvvm_f2h_rn">,
1256349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
12570b57cec5SDimitry Andric
125806c3fb27SDimitry Andric  def int_nvvm_bf2h_rn_ftz : ClangBuiltin<"__nvvm_bf2h_rn_ftz">,
125906c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
126006c3fb27SDimitry Andric  def int_nvvm_bf2h_rn : ClangBuiltin<"__nvvm_bf2h_rn">,
126106c3fb27SDimitry Andric      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
126206c3fb27SDimitry Andric
126381ad6265SDimitry Andric  def int_nvvm_ff2bf16x2_rn : ClangBuiltin<"__nvvm_ff2bf16x2_rn">,
126406c3fb27SDimitry Andric       Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
126581ad6265SDimitry Andric  def int_nvvm_ff2bf16x2_rn_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rn_relu">,
126606c3fb27SDimitry Andric      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
126781ad6265SDimitry Andric  def int_nvvm_ff2bf16x2_rz : ClangBuiltin<"__nvvm_ff2bf16x2_rz">,
126806c3fb27SDimitry Andric      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
126981ad6265SDimitry Andric  def int_nvvm_ff2bf16x2_rz_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rz_relu">,
127006c3fb27SDimitry Andric      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem]>;
127104eeddc0SDimitry Andric
127281ad6265SDimitry Andric  def int_nvvm_ff2f16x2_rn : ClangBuiltin<"__nvvm_ff2f16x2_rn">,
127381ad6265SDimitry Andric      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
127481ad6265SDimitry Andric  def int_nvvm_ff2f16x2_rn_relu : ClangBuiltin<"__nvvm_ff2f16x2_rn_relu">,
127581ad6265SDimitry Andric      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
127681ad6265SDimitry Andric  def int_nvvm_ff2f16x2_rz : ClangBuiltin<"__nvvm_ff2f16x2_rz">,
127781ad6265SDimitry Andric      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
127881ad6265SDimitry Andric  def int_nvvm_ff2f16x2_rz_relu : ClangBuiltin<"__nvvm_ff2f16x2_rz_relu">,
127981ad6265SDimitry Andric      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
128004eeddc0SDimitry Andric
128181ad6265SDimitry Andric  def int_nvvm_f2bf16_rn : ClangBuiltin<"__nvvm_f2bf16_rn">,
128206c3fb27SDimitry Andric      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
128381ad6265SDimitry Andric  def int_nvvm_f2bf16_rn_relu : ClangBuiltin<"__nvvm_f2bf16_rn_relu">,
128406c3fb27SDimitry Andric      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
128581ad6265SDimitry Andric  def int_nvvm_f2bf16_rz : ClangBuiltin<"__nvvm_f2bf16_rz">,
128606c3fb27SDimitry Andric      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
128781ad6265SDimitry Andric  def int_nvvm_f2bf16_rz_relu : ClangBuiltin<"__nvvm_f2bf16_rz_relu">,
128806c3fb27SDimitry Andric       Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
128904eeddc0SDimitry Andric
129081ad6265SDimitry Andric  def int_nvvm_f2tf32_rna : ClangBuiltin<"__nvvm_f2tf32_rna">,
129181ad6265SDimitry Andric      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
129204eeddc0SDimitry Andric
12930b57cec5SDimitry Andric//
12940b57cec5SDimitry Andric// Bitcast
12950b57cec5SDimitry Andric//
12960b57cec5SDimitry Andric
129781ad6265SDimitry Andric  def int_nvvm_bitcast_f2i : ClangBuiltin<"__nvvm_bitcast_f2i">,
1298349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
129981ad6265SDimitry Andric  def int_nvvm_bitcast_i2f : ClangBuiltin<"__nvvm_bitcast_i2f">,
1300349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
13010b57cec5SDimitry Andric
130281ad6265SDimitry Andric  def int_nvvm_bitcast_ll2d : ClangBuiltin<"__nvvm_bitcast_ll2d">,
1303349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
130481ad6265SDimitry Andric  def int_nvvm_bitcast_d2ll : ClangBuiltin<"__nvvm_bitcast_d2ll">,
1305349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
13060b57cec5SDimitry Andric
13070b57cec5SDimitry Andric// FNS
13080b57cec5SDimitry Andric
130981ad6265SDimitry Andric  def int_nvvm_fns : ClangBuiltin<"__nvvm_fns">,
1310349cc55cSDimitry Andric      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
13110b57cec5SDimitry Andric                [IntrNoMem]>;
13120b57cec5SDimitry Andric
13130b57cec5SDimitry Andric// Atomics not available as llvm intrinsics.
13140b57cec5SDimitry Andric  def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
131506c3fb27SDimitry Andric          [llvm_anyptr_ty, llvm_i32_ty],
131681ad6265SDimitry Andric                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
13170b57cec5SDimitry Andric  def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
131806c3fb27SDimitry Andric          [llvm_anyptr_ty, llvm_i32_ty],
131981ad6265SDimitry Andric                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
13200b57cec5SDimitry Andric
13210b57cec5SDimitry Andric  class SCOPED_ATOMIC2_impl<LLVMType elty>
13220b57cec5SDimitry Andric        : Intrinsic<[elty],
132306c3fb27SDimitry Andric          [llvm_anyptr_ty, LLVMMatchType<0>],
132481ad6265SDimitry Andric          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
13250b57cec5SDimitry Andric  class SCOPED_ATOMIC3_impl<LLVMType elty>
13260b57cec5SDimitry Andric        : Intrinsic<[elty],
132706c3fb27SDimitry Andric          [llvm_anyptr_ty, LLVMMatchType<0>,
13280b57cec5SDimitry Andric           LLVMMatchType<0>],
132981ad6265SDimitry Andric          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
13300b57cec5SDimitry Andric
13310b57cec5SDimitry Andric  multiclass PTXAtomicWithScope2<LLVMType elty> {
13320b57cec5SDimitry Andric    def _cta : SCOPED_ATOMIC2_impl<elty>;
13330b57cec5SDimitry Andric    def _sys : SCOPED_ATOMIC2_impl<elty>;
13340b57cec5SDimitry Andric  }
13350b57cec5SDimitry Andric  multiclass PTXAtomicWithScope3<LLVMType elty> {
13360b57cec5SDimitry Andric    def _cta : SCOPED_ATOMIC3_impl<elty>;
13370b57cec5SDimitry Andric    def _sys : SCOPED_ATOMIC3_impl<elty>;
13380b57cec5SDimitry Andric  }
13390b57cec5SDimitry Andric  multiclass PTXAtomicWithScope2_fi {
13400b57cec5SDimitry Andric    defm _f: PTXAtomicWithScope2<llvm_anyfloat_ty>;
13410b57cec5SDimitry Andric    defm _i: PTXAtomicWithScope2<llvm_anyint_ty>;
13420b57cec5SDimitry Andric  }
13430b57cec5SDimitry Andric  defm int_nvvm_atomic_add_gen   : PTXAtomicWithScope2_fi;
13440b57cec5SDimitry Andric  defm int_nvvm_atomic_inc_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13450b57cec5SDimitry Andric  defm int_nvvm_atomic_dec_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13460b57cec5SDimitry Andric  defm int_nvvm_atomic_exch_gen_i: PTXAtomicWithScope2<llvm_anyint_ty>;
13470b57cec5SDimitry Andric  defm int_nvvm_atomic_xor_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13480b57cec5SDimitry Andric  defm int_nvvm_atomic_max_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13490b57cec5SDimitry Andric  defm int_nvvm_atomic_min_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13500b57cec5SDimitry Andric  defm int_nvvm_atomic_or_gen_i  : PTXAtomicWithScope2<llvm_anyint_ty>;
13510b57cec5SDimitry Andric  defm int_nvvm_atomic_and_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
13520b57cec5SDimitry Andric  defm int_nvvm_atomic_cas_gen_i : PTXAtomicWithScope3<llvm_anyint_ty>;
13530b57cec5SDimitry Andric
13540b57cec5SDimitry Andric// Bar.Sync
13550b57cec5SDimitry Andric
13560b57cec5SDimitry Andric  // The builtin for "bar.sync 0" is called __syncthreads.  Unlike most of the
13570b57cec5SDimitry Andric  // intrinsics in this file, this one is a user-facing API.
135881ad6265SDimitry Andric  def int_nvvm_barrier0 : ClangBuiltin<"__syncthreads">,
135981ad6265SDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
13600b57cec5SDimitry Andric  // Synchronize all threads in the CTA at barrier 'n'.
136181ad6265SDimitry Andric  def int_nvvm_barrier_n : ClangBuiltin<"__nvvm_bar_n">,
136281ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
13630b57cec5SDimitry Andric  // Synchronize 'm', a multiple of warp size, (arg 2) threads in
13640b57cec5SDimitry Andric  // the CTA at barrier 'n' (arg 1).
136581ad6265SDimitry Andric  def int_nvvm_barrier : ClangBuiltin<"__nvvm_bar">,
136681ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
136781ad6265SDimitry Andric  def int_nvvm_barrier0_popc : ClangBuiltin<"__nvvm_bar0_popc">,
136881ad6265SDimitry Andric      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
136981ad6265SDimitry Andric  def int_nvvm_barrier0_and : ClangBuiltin<"__nvvm_bar0_and">,
137081ad6265SDimitry Andric      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
137181ad6265SDimitry Andric  def int_nvvm_barrier0_or : ClangBuiltin<"__nvvm_bar0_or">,
137281ad6265SDimitry Andric      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
13730b57cec5SDimitry Andric
13740b57cec5SDimitry Andric  def int_nvvm_bar_sync :
137581ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
137681ad6265SDimitry Andric      ClangBuiltin<"__nvvm_bar_sync">;
13770b57cec5SDimitry Andric  def int_nvvm_bar_warp_sync :
137881ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
137981ad6265SDimitry Andric      ClangBuiltin<"__nvvm_bar_warp_sync">;
13800b57cec5SDimitry Andric
13810b57cec5SDimitry Andric  // barrier.sync id[, cnt]
13820b57cec5SDimitry Andric  def int_nvvm_barrier_sync :
138381ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
138481ad6265SDimitry Andric      ClangBuiltin<"__nvvm_barrier_sync">;
13850b57cec5SDimitry Andric  def int_nvvm_barrier_sync_cnt :
138681ad6265SDimitry Andric      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
138781ad6265SDimitry Andric      ClangBuiltin<"__nvvm_barrier_sync_cnt">;
13880b57cec5SDimitry Andric
138906c3fb27SDimitry Andric  // barrier.cluster.[wait, arrive, arrive.relaxed]
139006c3fb27SDimitry Andric  def int_nvvm_barrier_cluster_arrive :
139106c3fb27SDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
139206c3fb27SDimitry Andric  def int_nvvm_barrier_cluster_arrive_relaxed :
139306c3fb27SDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
139406c3fb27SDimitry Andric  def int_nvvm_barrier_cluster_wait :
139506c3fb27SDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
139606c3fb27SDimitry Andric
13977a6dacacSDimitry Andric  // 'aligned' versions of the above barrier.cluster.* intrinsics
13987a6dacacSDimitry Andric  def int_nvvm_barrier_cluster_arrive_aligned :
13997a6dacacSDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
14007a6dacacSDimitry Andric  def int_nvvm_barrier_cluster_arrive_relaxed_aligned :
14017a6dacacSDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
14027a6dacacSDimitry Andric  def int_nvvm_barrier_cluster_wait_aligned :
14037a6dacacSDimitry Andric      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
14047a6dacacSDimitry Andric
14050b57cec5SDimitry Andric  // Membar
140681ad6265SDimitry Andric  def int_nvvm_membar_cta : ClangBuiltin<"__nvvm_membar_cta">,
140781ad6265SDimitry Andric      Intrinsic<[], [], [IntrNoCallback]>;
140881ad6265SDimitry Andric  def int_nvvm_membar_gl : ClangBuiltin<"__nvvm_membar_gl">,
140981ad6265SDimitry Andric      Intrinsic<[], [], [IntrNoCallback]>;
141081ad6265SDimitry Andric  def int_nvvm_membar_sys : ClangBuiltin<"__nvvm_membar_sys">,
141181ad6265SDimitry Andric      Intrinsic<[], [], [IntrNoCallback]>;
141206c3fb27SDimitry Andric  def int_nvvm_fence_sc_cluster:
141306c3fb27SDimitry Andric      Intrinsic<[], [], [IntrNoCallback]>;
14140b57cec5SDimitry Andric
1415fe6060f1SDimitry Andric// Async Copy
1416fe6060f1SDimitry Andricdef int_nvvm_cp_async_mbarrier_arrive :
141781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive">,
141806c3fb27SDimitry Andric    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1419fe6060f1SDimitry Andricdef int_nvvm_cp_async_mbarrier_arrive_shared :
142081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_shared">,
142106c3fb27SDimitry Andric    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1422fe6060f1SDimitry Andricdef int_nvvm_cp_async_mbarrier_arrive_noinc :
142381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc">,
142406c3fb27SDimitry Andric    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1425fe6060f1SDimitry Andricdef int_nvvm_cp_async_mbarrier_arrive_noinc_shared :
142681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc_shared">,
142706c3fb27SDimitry Andric    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1428fe6060f1SDimitry Andric
142906c3fb27SDimitry Andricmulticlass CP_ASYNC_SHARED_GLOBAL<string n, string cc> {
143006c3fb27SDimitry Andric  def NAME: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty],
143181ad6265SDimitry Andric        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1432fe6060f1SDimitry Andric        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
143306c3fb27SDimitry Andric        "llvm.nvvm.cp.async." # cc # ".shared.global." # n>;
143406c3fb27SDimitry Andric  def _s: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty, llvm_i32_ty],
143581ad6265SDimitry Andric        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1436fe6060f1SDimitry Andric        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
143706c3fb27SDimitry Andric        "llvm.nvvm.cp.async." # cc # ".shared.global." # n # ".s">;
143806c3fb27SDimitry Andric}
143906c3fb27SDimitry Andric
144006c3fb27SDimitry Andricdefm int_nvvm_cp_async_ca_shared_global_4 : CP_ASYNC_SHARED_GLOBAL<"4", "ca">;
144106c3fb27SDimitry Andricdefm int_nvvm_cp_async_ca_shared_global_8 : CP_ASYNC_SHARED_GLOBAL<"8", "ca">;
144206c3fb27SDimitry Andricdefm int_nvvm_cp_async_ca_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "ca">;
144306c3fb27SDimitry Andricdefm int_nvvm_cp_async_cg_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "cg">;
1444fe6060f1SDimitry Andric
1445fe6060f1SDimitry Andricdef int_nvvm_cp_async_commit_group :
144681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_commit_group">,
1447fe6060f1SDimitry Andric    Intrinsic<[],[],[]>;
1448fe6060f1SDimitry Andric
1449fe6060f1SDimitry Andricdef int_nvvm_cp_async_wait_group :
145081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_wait_group">,
1451fe6060f1SDimitry Andric    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
1452fe6060f1SDimitry Andric
1453fe6060f1SDimitry Andricdef int_nvvm_cp_async_wait_all :
145481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_cp_async_wait_all">,
1455fe6060f1SDimitry Andric    Intrinsic<[],[],[]>;
1456fe6060f1SDimitry Andric
14577a6dacacSDimitry Andric// cp.async.bulk variants of the commit/wait group
14587a6dacacSDimitry Andricdef int_nvvm_cp_async_bulk_commit_group :
14597a6dacacSDimitry Andric    Intrinsic<[],[],[]>;
14607a6dacacSDimitry Andric
14617a6dacacSDimitry Andricdef int_nvvm_cp_async_bulk_wait_group :
14627a6dacacSDimitry Andric    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
14637a6dacacSDimitry Andric
14647a6dacacSDimitry Andricdef int_nvvm_cp_async_bulk_wait_group_read :
14657a6dacacSDimitry Andric    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
14667a6dacacSDimitry Andric
1467fe6060f1SDimitry Andric// mbarrier
146881ad6265SDimitry Andricdef int_nvvm_mbarrier_init : ClangBuiltin<"__nvvm_mbarrier_init">,
146906c3fb27SDimitry Andric    Intrinsic<[],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1470fe6060f1SDimitry Andricdef int_nvvm_mbarrier_init_shared :
147181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_init_shared">,
147206c3fb27SDimitry Andric    Intrinsic<[],[llvm_shared_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1473fe6060f1SDimitry Andric
147481ad6265SDimitry Andricdef int_nvvm_mbarrier_inval : ClangBuiltin<"__nvvm_mbarrier_inval">,
147506c3fb27SDimitry Andric    Intrinsic<[],[llvm_ptr_ty],
147681ad6265SDimitry Andric    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1477fe6060f1SDimitry Andric    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1478fe6060f1SDimitry Andricdef int_nvvm_mbarrier_inval_shared :
147981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_inval_shared">,
148006c3fb27SDimitry Andric    Intrinsic<[],[llvm_shared_ptr_ty],
148181ad6265SDimitry Andric    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1482fe6060f1SDimitry Andric    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1483fe6060f1SDimitry Andric
148481ad6265SDimitry Andricdef int_nvvm_mbarrier_arrive : ClangBuiltin<"__nvvm_mbarrier_arrive">,
148506c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1486fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_shared :
148781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_shared">,
148806c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1489fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_noComplete :
149081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete">,
149106c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1492fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_noComplete_shared :
149381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete_shared">,
149406c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
149581ad6265SDimitry Andric    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1496fe6060f1SDimitry Andric
1497fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_drop :
149881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_drop">,
149906c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1500fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_drop_shared :
150181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_shared">,
150206c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1503fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_drop_noComplete :
150481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete">,
150506c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1506fe6060f1SDimitry Andricdef int_nvvm_mbarrier_arrive_drop_noComplete_shared :
150781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete_shared">,
150806c3fb27SDimitry Andric    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
150981ad6265SDimitry Andric    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1510fe6060f1SDimitry Andric
1511fe6060f1SDimitry Andricdef int_nvvm_mbarrier_test_wait :
151281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_test_wait">,
151306c3fb27SDimitry Andric    Intrinsic<[llvm_i1_ty],[llvm_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1514fe6060f1SDimitry Andricdef int_nvvm_mbarrier_test_wait_shared :
151581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_test_wait_shared">,
151606c3fb27SDimitry Andric    Intrinsic<[llvm_i1_ty],[llvm_shared_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1517fe6060f1SDimitry Andric
1518fe6060f1SDimitry Andricdef int_nvvm_mbarrier_pending_count :
151981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_mbarrier_pending_count">,
152081ad6265SDimitry Andric    Intrinsic<[llvm_i32_ty],[llvm_i64_ty],[IntrNoMem, IntrConvergent, IntrNoCallback]>;
1521fe6060f1SDimitry Andric
15220b57cec5SDimitry Andric// Generated within nvvm. Use for ldu on sm_20 or later.  Second arg is the
15230b57cec5SDimitry Andric// pointer's alignment.
15240b57cec5SDimitry Andricdef int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
152506c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
152681ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15270b57cec5SDimitry Andric  "llvm.nvvm.ldu.global.i">;
15280b57cec5SDimitry Andricdef int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
152906c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
153081ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15310b57cec5SDimitry Andric  "llvm.nvvm.ldu.global.f">;
15320b57cec5SDimitry Andricdef int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
153306c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
153481ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15350b57cec5SDimitry Andric  "llvm.nvvm.ldu.global.p">;
15360b57cec5SDimitry Andric
15370b57cec5SDimitry Andric// Generated within nvvm. Use for ldg on sm_35 or later.  Second arg is the
15380b57cec5SDimitry Andric// pointer's alignment.
15390b57cec5SDimitry Andricdef int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
154006c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
154181ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15420b57cec5SDimitry Andric  "llvm.nvvm.ldg.global.i">;
15430b57cec5SDimitry Andricdef int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
154406c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
154581ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15460b57cec5SDimitry Andric  "llvm.nvvm.ldg.global.f">;
15470b57cec5SDimitry Andricdef int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
154806c3fb27SDimitry Andric  [llvm_anyptr_ty, llvm_i32_ty],
154981ad6265SDimitry Andric  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
15500b57cec5SDimitry Andric  "llvm.nvvm.ldg.global.p">;
15510b57cec5SDimitry Andric
15520b57cec5SDimitry Andric// Use for generic pointers
15530b57cec5SDimitry Andric// - These intrinsics are used to convert address spaces.
15540b57cec5SDimitry Andric// - The input pointer and output pointer must have the same type, except for
15550b57cec5SDimitry Andric//   the address-space. (This restriction is not enforced here as there is
15560b57cec5SDimitry Andric//   currently no way to describe it).
15570b57cec5SDimitry Andric// - This complements the llvm bitcast, which can be used to cast one type
15580b57cec5SDimitry Andric//   of pointer to another type of pointer, while the address space remains
15590b57cec5SDimitry Andric//   the same.
1560349cc55cSDimitry Andricdef int_nvvm_ptr_local_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1561349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15620b57cec5SDimitry Andric                 "llvm.nvvm.ptr.local.to.gen">;
1563349cc55cSDimitry Andricdef int_nvvm_ptr_shared_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1564349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15650b57cec5SDimitry Andric                 "llvm.nvvm.ptr.shared.to.gen">;
1566349cc55cSDimitry Andricdef int_nvvm_ptr_global_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1567349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15680b57cec5SDimitry Andric                 "llvm.nvvm.ptr.global.to.gen">;
1569349cc55cSDimitry Andricdef int_nvvm_ptr_constant_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1570349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15710b57cec5SDimitry Andric                 "llvm.nvvm.ptr.constant.to.gen">;
15720b57cec5SDimitry Andric
1573349cc55cSDimitry Andricdef int_nvvm_ptr_gen_to_global: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1574349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15750b57cec5SDimitry Andric                 "llvm.nvvm.ptr.gen.to.global">;
1576349cc55cSDimitry Andricdef int_nvvm_ptr_gen_to_shared: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1577349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15780b57cec5SDimitry Andric                 "llvm.nvvm.ptr.gen.to.shared">;
1579349cc55cSDimitry Andricdef int_nvvm_ptr_gen_to_local: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1580349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15810b57cec5SDimitry Andric                 "llvm.nvvm.ptr.gen.to.local">;
1582349cc55cSDimitry Andricdef int_nvvm_ptr_gen_to_constant: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1583349cc55cSDimitry Andric                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
15840b57cec5SDimitry Andric                 "llvm.nvvm.ptr.gen.to.constant">;
15850b57cec5SDimitry Andric
15860b57cec5SDimitry Andric// Used in nvvm internally to help address space opt and ptx code generation
15870b57cec5SDimitry Andric// This is for params that are passed to kernel functions by pointer by-val.
15880b57cec5SDimitry Andricdef int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
15890b57cec5SDimitry Andric                                     [llvm_anyptr_ty],
159081ad6265SDimitry Andric                                   [IntrNoMem, IntrSpeculatable, IntrNoCallback],
15910b57cec5SDimitry Andric                                   "llvm.nvvm.ptr.gen.to.param">;
15920b57cec5SDimitry Andric
15930b57cec5SDimitry Andric// Move intrinsics, used in nvvm internally
15940b57cec5SDimitry Andric
15950b57cec5SDimitry Andricdef int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
15960b57cec5SDimitry Andric  "llvm.nvvm.move.i16">;
15970b57cec5SDimitry Andricdef int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
15980b57cec5SDimitry Andric  "llvm.nvvm.move.i32">;
15990b57cec5SDimitry Andricdef int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
16000b57cec5SDimitry Andric  "llvm.nvvm.move.i64">;
16010b57cec5SDimitry Andricdef int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
16020b57cec5SDimitry Andric  [IntrNoMem], "llvm.nvvm.move.float">;
16030b57cec5SDimitry Andricdef int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
16040b57cec5SDimitry Andric  [IntrNoMem], "llvm.nvvm.move.double">;
16050b57cec5SDimitry Andricdef int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
16065ffd83dbSDimitry Andric  [IntrNoMem, NoCapture<ArgIndex<0>>], "llvm.nvvm.move.ptr">;
16070b57cec5SDimitry Andric
16080b57cec5SDimitry Andric
16090b57cec5SDimitry Andric// For getting the handle from a texture or surface variable
16100b57cec5SDimitry Andricdef int_nvvm_texsurf_handle
161106c3fb27SDimitry Andric  : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyptr_ty],
16120b57cec5SDimitry Andric              [IntrNoMem], "llvm.nvvm.texsurf.handle">;
16130b57cec5SDimitry Andricdef int_nvvm_texsurf_handle_internal
16140b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
16150b57cec5SDimitry Andric              [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
16160b57cec5SDimitry Andric
16170b57cec5SDimitry Andric/// Error / Warn
16180b57cec5SDimitry Andricdef int_nvvm_compiler_error :
16190b57cec5SDimitry Andric    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
16200b57cec5SDimitry Andricdef int_nvvm_compiler_warn :
16210b57cec5SDimitry Andric    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
16220b57cec5SDimitry Andric
16230b57cec5SDimitry Andricdef int_nvvm_reflect :
16240b57cec5SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty], [IntrNoMem], "llvm.nvvm.reflect">;
16250b57cec5SDimitry Andric
16260b57cec5SDimitry Andric// isspacep.{const, global, local, shared}
16270b57cec5SDimitry Andricdef int_nvvm_isspacep_const
1628bdd1243dSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1629bdd1243dSDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
16300b57cec5SDimitry Andric              "llvm.nvvm.isspacep.const">,
163181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_isspacep_const">;
16320b57cec5SDimitry Andricdef int_nvvm_isspacep_global
1633bdd1243dSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1634bdd1243dSDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
16350b57cec5SDimitry Andric              "llvm.nvvm.isspacep.global">,
163681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_isspacep_global">;
16370b57cec5SDimitry Andricdef int_nvvm_isspacep_local
1638bdd1243dSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1639bdd1243dSDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
16400b57cec5SDimitry Andric              "llvm.nvvm.isspacep.local">,
164181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_isspacep_local">;
16420b57cec5SDimitry Andricdef int_nvvm_isspacep_shared
1643bdd1243dSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1644bdd1243dSDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
16450b57cec5SDimitry Andric              "llvm.nvvm.isspacep.shared">,
164681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_isspacep_shared">;
164706c3fb27SDimitry Andricdef int_nvvm_isspacep_shared_cluster
164806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
164906c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
165006c3fb27SDimitry Andric              "llvm.nvvm.isspacep.shared.cluster">;
16510b57cec5SDimitry Andric
16520b57cec5SDimitry Andric// Environment register read
16530b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg0
165406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16550b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg0">,
165681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
16570b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg1
165806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16590b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg1">,
166081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
16610b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg2
166206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16630b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg2">,
166481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
16650b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg3
166606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16670b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg3">,
166881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
16690b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg4
167006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16710b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg4">,
167281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
16730b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg5
167406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16750b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg5">,
167681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
16770b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg6
167806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16790b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg6">,
168081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
16810b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg7
168206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16830b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg7">,
168481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
16850b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg8
168606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16870b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg8">,
168881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
16890b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg9
169006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16910b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg9">,
169281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
16930b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg10
169406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16950b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg10">,
169681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
16970b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg11
169806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
16990b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg11">,
170081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
17010b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg12
170206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17030b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg12">,
170481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
17050b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg13
170606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17070b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg13">,
170881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
17090b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg14
171006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17110b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg14">,
171281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
17130b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg15
171406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17150b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg15">,
171681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
17170b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg16
171806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17190b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg16">,
172081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
17210b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg17
172206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17230b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg17">,
172481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
17250b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg18
172606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17270b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg18">,
172881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
17290b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg19
173006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17310b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg19">,
173281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
17330b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg20
173406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17350b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg20">,
173681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
17370b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg21
173806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17390b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg21">,
174081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
17410b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg22
174206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17430b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg22">,
174481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
17450b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg23
174606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17470b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg23">,
174881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
17490b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg24
175006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17510b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg24">,
175281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
17530b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg25
175406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17550b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg25">,
175681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
17570b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg26
175806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17590b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg26">,
176081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
17610b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg27
176206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17630b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg27">,
176481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
17650b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg28
176606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17670b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg28">,
176881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
17690b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg29
177006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17710b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg29">,
177281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
17730b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg30
177406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17750b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg30">,
177681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
17770b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_envreg31
177806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
17790b57cec5SDimitry Andric              "llvm.nvvm.read.ptx.sreg.envreg31">,
178081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
17810b57cec5SDimitry Andric
17820b57cec5SDimitry Andric
17830b57cec5SDimitry Andric// Texture Fetch
17840b57cec5SDimitry Andric// texmode_independent
17850b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4f32_s32
17860b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
17870b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
17880b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4f32.s32">;
17890b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4f32_f32
17900b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
17910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
17920b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4f32.f32">;
17930b57cec5SDimitry Andricdef int_nvvm_tex_1d_level_v4f32_f32
17940b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
17950b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
17960b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.level.v4f32.f32">;
17970b57cec5SDimitry Andricdef int_nvvm_tex_1d_grad_v4f32_f32
17980b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
17990b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
18000b57cec5SDimitry Andric               llvm_float_ty], [],
18010b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.grad.v4f32.f32">;
18020b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4s32_s32
18030b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18040b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
18050b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4s32.s32">;
18060b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4s32_f32
18070b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18080b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
18090b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4s32.f32">;
18100b57cec5SDimitry Andricdef int_nvvm_tex_1d_level_v4s32_f32
18110b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18120b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
18130b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.level.v4s32.f32">;
18140b57cec5SDimitry Andricdef int_nvvm_tex_1d_grad_v4s32_f32
18150b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
18170b57cec5SDimitry Andric               llvm_float_ty], [],
18180b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.grad.v4s32.f32">;
18190b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4u32_s32
18200b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18210b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
18220b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4u32.s32">;
18230b57cec5SDimitry Andricdef int_nvvm_tex_1d_v4u32_f32
18240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
18260b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.v4u32.f32">;
18270b57cec5SDimitry Andricdef int_nvvm_tex_1d_level_v4u32_f32
18280b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18290b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
18300b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.level.v4u32.f32">;
18310b57cec5SDimitry Andricdef int_nvvm_tex_1d_grad_v4u32_f32
18320b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
18340b57cec5SDimitry Andric               llvm_float_ty], [],
18350b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.grad.v4u32.f32">;
18360b57cec5SDimitry Andric
18370b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4f32_s32
18380b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18390b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
18400b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4f32.s32">;
18410b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4f32_f32
18420b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
18440b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4f32.f32">;
18450b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_level_v4f32_f32
18460b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18480b57cec5SDimitry Andric               llvm_float_ty], [],
18490b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
18500b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_grad_v4f32_f32
18510b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18520b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18530b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
18540b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
18550b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4s32_s32
18560b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
18580b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4s32.s32">;
18590b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4s32_f32
18600b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18610b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
18620b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4s32.f32">;
18630b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_level_v4s32_f32
18640b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18650b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18660b57cec5SDimitry Andric               llvm_float_ty], [],
18670b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.level.v4s32.f32">;
18680b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_grad_v4s32_f32
18690b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18700b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18710b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
18720b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.grad.v4s32.f32">;
18730b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4u32_s32
18740b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
18760b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4u32.s32">;
18770b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_v4u32_f32
18780b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18790b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
18800b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.v4u32.f32">;
18810b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_level_v4u32_f32
18820b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18830b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18840b57cec5SDimitry Andric               llvm_float_ty], [],
18850b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.level.v4u32.f32">;
18860b57cec5SDimitry Andricdef int_nvvm_tex_1d_array_grad_v4u32_f32
18870b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
18880b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
18890b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
18900b57cec5SDimitry Andric              "llvm.nvvm.tex.1d.array.grad.v4u32.f32">;
18910b57cec5SDimitry Andric
18920b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4f32_s32
18930b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18940b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
18950b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4f32.s32">;
18960b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4f32_f32
18970b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
18980b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
18990b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4f32.f32">;
19000b57cec5SDimitry Andricdef int_nvvm_tex_2d_level_v4f32_f32
19010b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19020b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19030b57cec5SDimitry Andric               llvm_float_ty], [],
19040b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.level.v4f32.f32">;
19050b57cec5SDimitry Andricdef int_nvvm_tex_2d_grad_v4f32_f32
19060b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19070b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19080b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
19090b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.grad.v4f32.f32">;
19100b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4s32_s32
19110b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19120b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
19130b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4s32.s32">;
19140b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4s32_f32
19150b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
19170b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4s32.f32">;
19180b57cec5SDimitry Andricdef int_nvvm_tex_2d_level_v4s32_f32
19190b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19210b57cec5SDimitry Andric               llvm_float_ty], [],
19220b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.level.v4s32.f32">;
19230b57cec5SDimitry Andricdef int_nvvm_tex_2d_grad_v4s32_f32
19240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19260b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
19270b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.grad.v4s32.f32">;
19280b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4u32_s32
19290b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
19310b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4u32.s32">;
19320b57cec5SDimitry Andricdef int_nvvm_tex_2d_v4u32_f32
19330b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19340b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
19350b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.v4u32.f32">;
19360b57cec5SDimitry Andricdef int_nvvm_tex_2d_level_v4u32_f32
19370b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19380b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19390b57cec5SDimitry Andric               llvm_float_ty], [],
19400b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.level.v4u32.f32">;
19410b57cec5SDimitry Andricdef int_nvvm_tex_2d_grad_v4u32_f32
19420b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
19440b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
19450b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.grad.v4u32.f32">;
19460b57cec5SDimitry Andric
19470b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4f32_s32
19480b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19490b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
19500b57cec5SDimitry Andric               llvm_i32_ty], [],
19510b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4f32.s32">;
19520b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4f32_f32
19530b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19540b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19550b57cec5SDimitry Andric               llvm_float_ty], [],
19560b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4f32.f32">;
19570b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_level_v4f32_f32
19580b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19590b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19600b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
19610b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
19620b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_grad_v4f32_f32
19630b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
19640b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19650b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
19660b57cec5SDimitry Andric               llvm_float_ty], [],
19670b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
19680b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4s32_s32
19690b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19700b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
19710b57cec5SDimitry Andric               llvm_i32_ty], [],
19720b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4s32.s32">;
19730b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4s32_f32
19740b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19760b57cec5SDimitry Andric               llvm_float_ty], [],
19770b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4s32.f32">;
19780b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_level_v4s32_f32
19790b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19800b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19810b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
19820b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.level.v4s32.f32">;
19830b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_grad_v4s32_f32
19840b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19860b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
19870b57cec5SDimitry Andric               llvm_float_ty], [],
19880b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.grad.v4s32.f32">;
19890b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4u32_s32
19900b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
19920b57cec5SDimitry Andric               llvm_i32_ty], [],
19930b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4u32.s32">;
19940b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_v4u32_f32
19950b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
19960b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
19970b57cec5SDimitry Andric               llvm_float_ty], [],
19980b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.v4u32.f32">;
19990b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_level_v4u32_f32
20000b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20010b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
20020b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
20030b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.level.v4u32.f32">;
20040b57cec5SDimitry Andricdef int_nvvm_tex_2d_array_grad_v4u32_f32
20050b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20060b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
20070b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
20080b57cec5SDimitry Andric               llvm_float_ty], [],
20090b57cec5SDimitry Andric              "llvm.nvvm.tex.2d.array.grad.v4u32.f32">;
20100b57cec5SDimitry Andric
20110b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4f32_s32
20120b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20130b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20140b57cec5SDimitry Andric              [], "llvm.nvvm.tex.3d.v4f32.s32">;
20150b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4f32_f32
20160b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20170b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20180b57cec5SDimitry Andric               llvm_float_ty], [],
20190b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.v4f32.f32">;
20200b57cec5SDimitry Andricdef int_nvvm_tex_3d_level_v4f32_f32
20210b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20220b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20230b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
20240b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.level.v4f32.f32">;
20250b57cec5SDimitry Andricdef int_nvvm_tex_3d_grad_v4f32_f32
20260b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20270b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20280b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
20290b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20300b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.grad.v4f32.f32">;
20310b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4s32_s32
20320b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20340b57cec5SDimitry Andric              [], "llvm.nvvm.tex.3d.v4s32.s32">;
20350b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4s32_f32
20360b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20370b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20380b57cec5SDimitry Andric               llvm_float_ty], [],
20390b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.v4s32.f32">;
20400b57cec5SDimitry Andricdef int_nvvm_tex_3d_level_v4s32_f32
20410b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20420b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20430b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
20440b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.level.v4s32.f32">;
20450b57cec5SDimitry Andricdef int_nvvm_tex_3d_grad_v4s32_f32
20460b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20480b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
20490b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20500b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.grad.v4s32.f32">;
20510b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4u32_s32
20520b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20530b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20540b57cec5SDimitry Andric              [], "llvm.nvvm.tex.3d.v4u32.s32">;
20550b57cec5SDimitry Andricdef int_nvvm_tex_3d_v4u32_f32
20560b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20580b57cec5SDimitry Andric               llvm_float_ty], [],
20590b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.v4u32.f32">;
20600b57cec5SDimitry Andricdef int_nvvm_tex_3d_level_v4u32_f32
20610b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20620b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20630b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
20640b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.level.v4u32.f32">;
20650b57cec5SDimitry Andricdef int_nvvm_tex_3d_grad_v4u32_f32
20660b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20670b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
20680b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
20690b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20700b57cec5SDimitry Andric              "llvm.nvvm.tex.3d.grad.v4u32.f32">;
20710b57cec5SDimitry Andric
20720b57cec5SDimitry Andricdef int_nvvm_tex_cube_v4f32_f32
20730b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20740b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
20750b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20760b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.v4f32.f32">;
20770b57cec5SDimitry Andricdef int_nvvm_tex_cube_level_v4f32_f32
20780b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
20790b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
20800b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20810b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.level.v4f32.f32">;
20820b57cec5SDimitry Andricdef int_nvvm_tex_cube_v4s32_f32
20830b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20840b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
20850b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20860b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.v4s32.f32">;
20870b57cec5SDimitry Andricdef int_nvvm_tex_cube_level_v4s32_f32
20880b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20890b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
20900b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20910b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.level.v4s32.f32">;
20920b57cec5SDimitry Andricdef int_nvvm_tex_cube_v4u32_f32
20930b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20940b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
20950b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
20960b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.v4u32.f32">;
20970b57cec5SDimitry Andricdef int_nvvm_tex_cube_level_v4u32_f32
20980b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
20990b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty,
21000b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21010b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.level.v4u32.f32">;
21020b57cec5SDimitry Andric
21030b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_v4f32_f32
21040b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21050b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21060b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21070b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.v4f32.f32">;
21080b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_level_v4f32_f32
21090b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21100b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21110b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21120b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.level.v4f32.f32">;
21130b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_v4s32_f32
21140b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21150b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21160b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21170b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.v4s32.f32">;
21180b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_level_v4s32_f32
21190b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21210b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21220b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.level.v4s32.f32">;
21230b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_v4u32_f32
21240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21260b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21270b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.v4u32.f32">;
21280b57cec5SDimitry Andricdef int_nvvm_tex_cube_array_level_v4u32_f32
21290b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
21310b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
21320b57cec5SDimitry Andric              "llvm.nvvm.tex.cube.array.level.v4u32.f32">;
21330b57cec5SDimitry Andric
21340b57cec5SDimitry Andricdef int_nvvm_tld4_r_2d_v4f32_f32
21350b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21360b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21370b57cec5SDimitry Andric              "llvm.nvvm.tld4.r.2d.v4f32.f32">;
21380b57cec5SDimitry Andricdef int_nvvm_tld4_g_2d_v4f32_f32
21390b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21400b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21410b57cec5SDimitry Andric              "llvm.nvvm.tld4.g.2d.v4f32.f32">;
21420b57cec5SDimitry Andricdef int_nvvm_tld4_b_2d_v4f32_f32
21430b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21440b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21450b57cec5SDimitry Andric              "llvm.nvvm.tld4.b.2d.v4f32.f32">;
21460b57cec5SDimitry Andricdef int_nvvm_tld4_a_2d_v4f32_f32
21470b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21480b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21490b57cec5SDimitry Andric              "llvm.nvvm.tld4.a.2d.v4f32.f32">;
21500b57cec5SDimitry Andricdef int_nvvm_tld4_r_2d_v4s32_f32
21510b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21520b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21530b57cec5SDimitry Andric              "llvm.nvvm.tld4.r.2d.v4s32.f32">;
21540b57cec5SDimitry Andricdef int_nvvm_tld4_g_2d_v4s32_f32
21550b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21560b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21570b57cec5SDimitry Andric              "llvm.nvvm.tld4.g.2d.v4s32.f32">;
21580b57cec5SDimitry Andricdef int_nvvm_tld4_b_2d_v4s32_f32
21590b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21600b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21610b57cec5SDimitry Andric              "llvm.nvvm.tld4.b.2d.v4s32.f32">;
21620b57cec5SDimitry Andricdef int_nvvm_tld4_a_2d_v4s32_f32
21630b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21640b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21650b57cec5SDimitry Andric              "llvm.nvvm.tld4.a.2d.v4s32.f32">;
21660b57cec5SDimitry Andricdef int_nvvm_tld4_r_2d_v4u32_f32
21670b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21680b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21690b57cec5SDimitry Andric              "llvm.nvvm.tld4.r.2d.v4u32.f32">;
21700b57cec5SDimitry Andricdef int_nvvm_tld4_g_2d_v4u32_f32
21710b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21720b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21730b57cec5SDimitry Andric              "llvm.nvvm.tld4.g.2d.v4u32.f32">;
21740b57cec5SDimitry Andricdef int_nvvm_tld4_b_2d_v4u32_f32
21750b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21760b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21770b57cec5SDimitry Andric              "llvm.nvvm.tld4.b.2d.v4u32.f32">;
21780b57cec5SDimitry Andricdef int_nvvm_tld4_a_2d_v4u32_f32
21790b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
21800b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21810b57cec5SDimitry Andric              "llvm.nvvm.tld4.a.2d.v4u32.f32">;
21820b57cec5SDimitry Andric
21830b57cec5SDimitry Andric
21840b57cec5SDimitry Andric// texmode_unified
21850b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4f32_s32
21860b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21870b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
21880b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4f32.s32">;
21890b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4f32_f32
21900b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty], [],
21920b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4f32.f32">;
21930b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_level_v4f32_f32
21940b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21950b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
21960b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.level.v4f32.f32">;
21970b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_grad_v4f32_f32
21980b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
21990b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
22000b57cec5SDimitry Andric               llvm_float_ty], [],
22010b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.grad.v4f32.f32">;
22020b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4s32_s32
22030b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22040b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
22050b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4s32.s32">;
22060b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4s32_f32
22070b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22080b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty], [],
22090b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4s32.f32">;
22100b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_level_v4s32_f32
22110b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22120b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
22130b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.level.v4s32.f32">;
22140b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_grad_v4s32_f32
22150b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
22170b57cec5SDimitry Andric               llvm_float_ty], [],
22180b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.grad.v4s32.f32">;
22190b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4u32_s32
22200b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22210b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
22220b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4u32.s32">;
22230b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_v4u32_f32
22240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty], [],
22260b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.v4u32.f32">;
22270b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_level_v4u32_f32
22280b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22290b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
22300b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.level.v4u32.f32">;
22310b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_grad_v4u32_f32
22320b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
22340b57cec5SDimitry Andric               llvm_float_ty], [],
22350b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.grad.v4u32.f32">;
22360b57cec5SDimitry Andric
22370b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4f32_s32
22380b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22390b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
22400b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4f32.s32">;
22410b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4f32_f32
22420b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
22440b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4f32.f32">;
22450b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_level_v4f32_f32
22460b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22480b57cec5SDimitry Andric               llvm_float_ty], [],
22490b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32">;
22500b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_grad_v4f32_f32
22510b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22520b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22530b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
22540b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32">;
22550b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4s32_s32
22560b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
22580b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4s32.s32">;
22590b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4s32_f32
22600b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22610b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
22620b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4s32.f32">;
22630b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_level_v4s32_f32
22640b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22650b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22660b57cec5SDimitry Andric               llvm_float_ty], [],
22670b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32">;
22680b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_grad_v4s32_f32
22690b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22700b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22710b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
22720b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32">;
22730b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4u32_s32
22740b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
22760b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4u32.s32">;
22770b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_v4u32_f32
22780b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22790b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
22800b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.v4u32.f32">;
22810b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_level_v4u32_f32
22820b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22830b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22840b57cec5SDimitry Andric               llvm_float_ty], [],
22850b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32">;
22860b57cec5SDimitry Andricdef int_nvvm_tex_unified_1d_array_grad_v4u32_f32
22870b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
22880b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
22890b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
22900b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32">;
22910b57cec5SDimitry Andric
22920b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4f32_s32
22930b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22940b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
22950b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4f32.s32">;
22960b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4f32_f32
22970b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
22980b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
22990b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4f32.f32">;
23000b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_level_v4f32_f32
23010b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23020b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23030b57cec5SDimitry Andric               llvm_float_ty], [],
23040b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.level.v4f32.f32">;
23050b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_grad_v4f32_f32
23060b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23070b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23080b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
23090b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.grad.v4f32.f32">;
23100b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4s32_s32
23110b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23120b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
23130b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4s32.s32">;
23140b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4s32_f32
23150b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
23170b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4s32.f32">;
23180b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_level_v4s32_f32
23190b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23210b57cec5SDimitry Andric               llvm_float_ty], [],
23220b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.level.v4s32.f32">;
23230b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_grad_v4s32_f32
23240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23260b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
23270b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.grad.v4s32.f32">;
23280b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4u32_s32
23290b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
23310b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4u32.s32">;
23320b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_v4u32_f32
23330b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23340b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
23350b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.v4u32.f32">;
23360b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_level_v4u32_f32
23370b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23380b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23390b57cec5SDimitry Andric               llvm_float_ty], [],
23400b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.level.v4u32.f32">;
23410b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_grad_v4u32_f32
23420b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
23440b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
23450b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.grad.v4u32.f32">;
23460b57cec5SDimitry Andric
23470b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4f32_s32
23480b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23490b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
23500b57cec5SDimitry Andric               llvm_i32_ty], [],
23510b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4f32.s32">;
23520b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4f32_f32
23530b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23540b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23550b57cec5SDimitry Andric               llvm_float_ty], [],
23560b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4f32.f32">;
23570b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_level_v4f32_f32
23580b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23590b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23600b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
23610b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32">;
23620b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_grad_v4f32_f32
23630b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
23640b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23650b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
23660b57cec5SDimitry Andric               llvm_float_ty], [],
23670b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32">;
23680b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4s32_s32
23690b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23700b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
23710b57cec5SDimitry Andric               llvm_i32_ty], [],
23720b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4s32.s32">;
23730b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4s32_f32
23740b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23760b57cec5SDimitry Andric               llvm_float_ty], [],
23770b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4s32.f32">;
23780b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_level_v4s32_f32
23790b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23800b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23810b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
23820b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32">;
23830b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_grad_v4s32_f32
23840b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23860b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
23870b57cec5SDimitry Andric               llvm_float_ty], [],
23880b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32">;
23890b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4u32_s32
23900b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
23920b57cec5SDimitry Andric               llvm_i32_ty], [],
23930b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4u32.s32">;
23940b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_v4u32_f32
23950b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
23960b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
23970b57cec5SDimitry Andric               llvm_float_ty], [],
23980b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.v4u32.f32">;
23990b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_level_v4u32_f32
24000b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24010b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
24020b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
24030b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32">;
24040b57cec5SDimitry Andricdef int_nvvm_tex_unified_2d_array_grad_v4u32_f32
24050b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24060b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
24070b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
24080b57cec5SDimitry Andric               llvm_float_ty], [],
24090b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32">;
24100b57cec5SDimitry Andric
24110b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4f32_s32
24120b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24130b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24140b57cec5SDimitry Andric              [], "llvm.nvvm.tex.unified.3d.v4f32.s32">;
24150b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4f32_f32
24160b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24170b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24180b57cec5SDimitry Andric               llvm_float_ty], [],
24190b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.v4f32.f32">;
24200b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_level_v4f32_f32
24210b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24220b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24230b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
24240b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.level.v4f32.f32">;
24250b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_grad_v4f32_f32
24260b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24270b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24280b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
24290b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24300b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.grad.v4f32.f32">;
24310b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4s32_s32
24320b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24340b57cec5SDimitry Andric              [], "llvm.nvvm.tex.unified.3d.v4s32.s32">;
24350b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4s32_f32
24360b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24370b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24380b57cec5SDimitry Andric               llvm_float_ty], [],
24390b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.v4s32.f32">;
24400b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_level_v4s32_f32
24410b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24420b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24430b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
24440b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.level.v4s32.f32">;
24450b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_grad_v4s32_f32
24460b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24480b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
24490b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24500b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.grad.v4s32.f32">;
24510b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4u32_s32
24520b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24530b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24540b57cec5SDimitry Andric              [], "llvm.nvvm.tex.unified.3d.v4u32.s32">;
24550b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_v4u32_f32
24560b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24580b57cec5SDimitry Andric               llvm_float_ty], [],
24590b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.v4u32.f32">;
24600b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_level_v4u32_f32
24610b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24620b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24630b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty], [],
24640b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.level.v4u32.f32">;
24650b57cec5SDimitry Andricdef int_nvvm_tex_unified_3d_grad_v4u32_f32
24660b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24670b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
24680b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
24690b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24700b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.3d.grad.v4u32.f32">;
24710b57cec5SDimitry Andric
24720b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_v4f32_f32
24730b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24740b57cec5SDimitry Andric              [llvm_i64_ty,
24750b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24760b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.v4f32.f32">;
24770b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_level_v4f32_f32
24780b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
24790b57cec5SDimitry Andric              [llvm_i64_ty,
24800b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24810b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.level.v4f32.f32">;
24820b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_v4s32_f32
24830b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24840b57cec5SDimitry Andric              [llvm_i64_ty,
24850b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24860b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.v4s32.f32">;
24870b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_level_v4s32_f32
24880b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24890b57cec5SDimitry Andric              [llvm_i64_ty,
24900b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24910b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.level.v4s32.f32">;
24920b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_v4u32_f32
24930b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24940b57cec5SDimitry Andric              [llvm_i64_ty,
24950b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
24960b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.v4u32.f32">;
24970b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_level_v4u32_f32
24980b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
24990b57cec5SDimitry Andric              [llvm_i64_ty,
25000b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25010b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.level.v4u32.f32">;
25020b57cec5SDimitry Andric
25030b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_v4f32_f32
25040b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25050b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25060b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25070b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.v4f32.f32">;
25080b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_level_v4f32_f32
25090b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25100b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25110b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25120b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32">;
25130b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_v4s32_f32
25140b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25150b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25160b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25170b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.v4s32.f32">;
25180b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_level_v4s32_f32
25190b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25210b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25220b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32">;
25230b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_v4u32_f32
25240b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25260b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25270b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.v4u32.f32">;
25280b57cec5SDimitry Andricdef int_nvvm_tex_unified_cube_array_level_v4u32_f32
25290b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25310b57cec5SDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25320b57cec5SDimitry Andric              "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32">;
25330b57cec5SDimitry Andric
25347a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_grad_v4f32_f32
25357a6dacacSDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25367a6dacacSDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
25377a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25387a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25397a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.grad.v4f32.f32">;
25407a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_grad_v4s32_f32
25417a6dacacSDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25427a6dacacSDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
25437a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25447a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25457a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.grad.v4s32.f32">;
25467a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_grad_v4u32_f32
25477a6dacacSDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25487a6dacacSDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
25497a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25507a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25517a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.grad.v4u32.f32">;
25527a6dacacSDimitry Andric
25537a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_array_grad_v4f32_f32
25547a6dacacSDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25557a6dacacSDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25567a6dacacSDimitry Andric              llvm_float_ty, llvm_float_ty,
25577a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25587a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25597a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.array.grad.v4f32.f32">;
25607a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_array_grad_v4s32_f32
25617a6dacacSDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25627a6dacacSDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25637a6dacacSDimitry Andric              llvm_float_ty, llvm_float_ty,
25647a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25657a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25667a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.array.grad.v4s32.f32">;
25677a6dacacSDimitry Andricdef int_nvvm_tex_unified_cube_array_grad_v4u32_f32
25687a6dacacSDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25697a6dacacSDimitry Andric              [llvm_i64_ty, llvm_i32_ty,
25707a6dacacSDimitry Andric              llvm_float_ty, llvm_float_ty,
25717a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
25727a6dacacSDimitry Andric               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
25737a6dacacSDimitry Andric              "llvm.nvvm.tex.unified.cube.array.grad.v4u32.f32">;
25747a6dacacSDimitry Andric
25750b57cec5SDimitry Andricdef int_nvvm_tld4_unified_r_2d_v4f32_f32
25760b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25770b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25780b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.r.2d.v4f32.f32">;
25790b57cec5SDimitry Andricdef int_nvvm_tld4_unified_g_2d_v4f32_f32
25800b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25810b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25820b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.g.2d.v4f32.f32">;
25830b57cec5SDimitry Andricdef int_nvvm_tld4_unified_b_2d_v4f32_f32
25840b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25860b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.b.2d.v4f32.f32">;
25870b57cec5SDimitry Andricdef int_nvvm_tld4_unified_a_2d_v4f32_f32
25880b57cec5SDimitry Andric  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
25890b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25900b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.a.2d.v4f32.f32">;
25910b57cec5SDimitry Andricdef int_nvvm_tld4_unified_r_2d_v4s32_f32
25920b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25930b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25940b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.r.2d.v4s32.f32">;
25950b57cec5SDimitry Andricdef int_nvvm_tld4_unified_g_2d_v4s32_f32
25960b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
25970b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
25980b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.g.2d.v4s32.f32">;
25990b57cec5SDimitry Andricdef int_nvvm_tld4_unified_b_2d_v4s32_f32
26000b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26010b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26020b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.b.2d.v4s32.f32">;
26030b57cec5SDimitry Andricdef int_nvvm_tld4_unified_a_2d_v4s32_f32
26040b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26050b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26060b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.a.2d.v4s32.f32">;
26070b57cec5SDimitry Andricdef int_nvvm_tld4_unified_r_2d_v4u32_f32
26080b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26090b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26100b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.r.2d.v4u32.f32">;
26110b57cec5SDimitry Andricdef int_nvvm_tld4_unified_g_2d_v4u32_f32
26120b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26130b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26140b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.g.2d.v4u32.f32">;
26150b57cec5SDimitry Andricdef int_nvvm_tld4_unified_b_2d_v4u32_f32
26160b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26170b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26180b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.b.2d.v4u32.f32">;
26190b57cec5SDimitry Andricdef int_nvvm_tld4_unified_a_2d_v4u32_f32
26200b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26210b57cec5SDimitry Andric              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
26220b57cec5SDimitry Andric              "llvm.nvvm.tld4.unified.a.2d.v4u32.f32">;
26230b57cec5SDimitry Andric
26240b57cec5SDimitry Andric
26250b57cec5SDimitry Andric//=== Surface Load
26260b57cec5SDimitry Andric// .clamp variants
26270b57cec5SDimitry Andricdef int_nvvm_suld_1d_i8_clamp
26280b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
26290b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26300b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i8.clamp">;
26310b57cec5SDimitry Andricdef int_nvvm_suld_1d_i16_clamp
26320b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
26330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26340b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i16.clamp">;
26350b57cec5SDimitry Andricdef int_nvvm_suld_1d_i32_clamp
26360b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
26370b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26380b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i32.clamp">;
26390b57cec5SDimitry Andricdef int_nvvm_suld_1d_i64_clamp
26400b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
26410b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26420b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i64.clamp">;
26430b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i8_clamp
26440b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
26450b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26460b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i8.clamp">;
26470b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i16_clamp
26480b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
26490b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26500b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i16.clamp">;
26510b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i32_clamp
26520b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
26530b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26540b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i32.clamp">;
26550b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i64_clamp
26560b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
26570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26580b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i64.clamp">;
26590b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i8_clamp
26600b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
26610b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26620b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i8.clamp">;
26630b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i16_clamp
26640b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
26650b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26660b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i16.clamp">;
26670b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i32_clamp
26680b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
26690b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
26700b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i32.clamp">;
26710b57cec5SDimitry Andric
26720b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i8_clamp
26730b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
26740b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26750b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i8.clamp">;
26760b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i16_clamp
26770b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
26780b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26790b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i16.clamp">;
26800b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i32_clamp
26810b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
26820b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26830b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i32.clamp">;
26840b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i64_clamp
26850b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
26860b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26870b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i64.clamp">;
26880b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i8_clamp
26890b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
26900b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26910b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i8.clamp">;
26920b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i16_clamp
26930b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
26940b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26950b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i16.clamp">;
26960b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i32_clamp
26970b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
26980b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
26990b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i32.clamp">;
27000b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i64_clamp
27010b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
27020b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27030b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i64.clamp">;
27040b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i8_clamp
27050b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
27060b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27070b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i8.clamp">;
27080b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i16_clamp
27090b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
27100b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27110b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i16.clamp">;
27120b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i32_clamp
27130b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
27140b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27150b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i32.clamp">;
27160b57cec5SDimitry Andric
27170b57cec5SDimitry Andricdef int_nvvm_suld_2d_i8_clamp
27180b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
27190b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27200b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i8.clamp">;
27210b57cec5SDimitry Andricdef int_nvvm_suld_2d_i16_clamp
27220b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
27230b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27240b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i16.clamp">;
27250b57cec5SDimitry Andricdef int_nvvm_suld_2d_i32_clamp
27260b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
27270b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27280b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i32.clamp">;
27290b57cec5SDimitry Andricdef int_nvvm_suld_2d_i64_clamp
27300b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
27310b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27320b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i64.clamp">;
27330b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i8_clamp
27340b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
27350b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27360b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i8.clamp">;
27370b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i16_clamp
27380b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
27390b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27400b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i16.clamp">;
27410b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i32_clamp
27420b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
27430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27440b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i32.clamp">;
27450b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i64_clamp
27460b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
27470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27480b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i64.clamp">;
27490b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i8_clamp
27500b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
27510b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27520b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i8.clamp">;
27530b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i16_clamp
27540b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
27550b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27560b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i16.clamp">;
27570b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i32_clamp
27580b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
27590b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
27600b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i32.clamp">;
27610b57cec5SDimitry Andric
27620b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i8_clamp
27630b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
27640b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27650b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i8.clamp">;
27660b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i16_clamp
27670b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
27680b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27690b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i16.clamp">;
27700b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i32_clamp
27710b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
27720b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27730b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i32.clamp">;
27740b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i64_clamp
27750b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
27760b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27770b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i64.clamp">;
27780b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i8_clamp
27790b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
27800b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27810b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i8.clamp">;
27820b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i16_clamp
27830b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
27840b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27850b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i16.clamp">;
27860b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i32_clamp
27870b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
27880b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27890b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i32.clamp">;
27900b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i64_clamp
27910b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
27920b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27930b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i64.clamp">;
27940b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i8_clamp
27950b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
27960b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
27970b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i8.clamp">;
27980b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i16_clamp
27990b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
28000b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28010b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i16.clamp">;
28020b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i32_clamp
28030b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
28040b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28050b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i32.clamp">;
28060b57cec5SDimitry Andric
28070b57cec5SDimitry Andricdef int_nvvm_suld_3d_i8_clamp
28080b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
28090b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28100b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i8.clamp">;
28110b57cec5SDimitry Andricdef int_nvvm_suld_3d_i16_clamp
28120b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
28130b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28140b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i16.clamp">;
28150b57cec5SDimitry Andricdef int_nvvm_suld_3d_i32_clamp
28160b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
28170b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28180b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i32.clamp">;
28190b57cec5SDimitry Andricdef int_nvvm_suld_3d_i64_clamp
28200b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
28210b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28220b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i64.clamp">;
28230b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i8_clamp
28240b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
28250b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28260b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i8.clamp">;
28270b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i16_clamp
28280b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
28290b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28300b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i16.clamp">;
28310b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i32_clamp
28320b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
28330b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28340b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i32.clamp">;
28350b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i64_clamp
28360b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
28370b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28380b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i64.clamp">;
28390b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i8_clamp
28400b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
28410b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28420b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i8.clamp">;
28430b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i16_clamp
28440b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
28450b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28460b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i16.clamp">;
28470b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i32_clamp
28480b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
28490b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
28500b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i32.clamp">;
28510b57cec5SDimitry Andric
28520b57cec5SDimitry Andric// .trap variants
28530b57cec5SDimitry Andricdef int_nvvm_suld_1d_i8_trap
28540b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
28550b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28560b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i8.trap">;
28570b57cec5SDimitry Andricdef int_nvvm_suld_1d_i16_trap
28580b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
28590b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28600b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i16.trap">;
28610b57cec5SDimitry Andricdef int_nvvm_suld_1d_i32_trap
28620b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
28630b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28640b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i32.trap">;
28650b57cec5SDimitry Andricdef int_nvvm_suld_1d_i64_trap
28660b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
28670b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28680b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i64.trap">;
28690b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i8_trap
28700b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
28710b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28720b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i8.trap">;
28730b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i16_trap
28740b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
28750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28760b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i16.trap">;
28770b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i32_trap
28780b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
28790b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28800b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i32.trap">;
28810b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i64_trap
28820b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
28830b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28840b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i64.trap">;
28850b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i8_trap
28860b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
28870b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28880b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i8.trap">;
28890b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i16_trap
28900b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
28910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28920b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i16.trap">;
28930b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i32_trap
28940b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
28950b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
28960b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i32.trap">;
28970b57cec5SDimitry Andric
28980b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i8_trap
28990b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29000b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29010b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i8.trap">;
29020b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i16_trap
29030b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29040b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29050b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i16.trap">;
29060b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i32_trap
29070b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
29080b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29090b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i32.trap">;
29100b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i64_trap
29110b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
29120b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29130b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i64.trap">;
29140b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i8_trap
29150b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
29160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29170b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i8.trap">;
29180b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i16_trap
29190b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
29200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29210b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i16.trap">;
29220b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i32_trap
29230b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
29240b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29250b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i32.trap">;
29260b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i64_trap
29270b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
29280b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29290b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i64.trap">;
29300b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i8_trap
29310b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
29320b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29330b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i8.trap">;
29340b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i16_trap
29350b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
29360b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29370b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i16.trap">;
29380b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i32_trap
29390b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
29400b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29410b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i32.trap">;
29420b57cec5SDimitry Andric
29430b57cec5SDimitry Andricdef int_nvvm_suld_2d_i8_trap
29440b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29450b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29460b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i8.trap">;
29470b57cec5SDimitry Andricdef int_nvvm_suld_2d_i16_trap
29480b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29490b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29500b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i16.trap">;
29510b57cec5SDimitry Andricdef int_nvvm_suld_2d_i32_trap
29520b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
29530b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29540b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i32.trap">;
29550b57cec5SDimitry Andricdef int_nvvm_suld_2d_i64_trap
29560b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
29570b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29580b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i64.trap">;
29590b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i8_trap
29600b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
29610b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29620b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i8.trap">;
29630b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i16_trap
29640b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
29650b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29660b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i16.trap">;
29670b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i32_trap
29680b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
29690b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29700b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i32.trap">;
29710b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i64_trap
29720b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
29730b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29740b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i64.trap">;
29750b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i8_trap
29760b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
29770b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29780b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i8.trap">;
29790b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i16_trap
29800b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
29810b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29820b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i16.trap">;
29830b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i32_trap
29840b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
29850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
29860b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i32.trap">;
29870b57cec5SDimitry Andric
29880b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i8_trap
29890b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29900b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
29910b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i8.trap">;
29920b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i16_trap
29930b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
29940b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
29950b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i16.trap">;
29960b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i32_trap
29970b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
29980b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
29990b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i32.trap">;
30000b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i64_trap
30010b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
30020b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30030b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i64.trap">;
30040b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i8_trap
30050b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
30060b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30070b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i8.trap">;
30080b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i16_trap
30090b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
30100b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30110b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i16.trap">;
30120b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i32_trap
30130b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
30140b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30150b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i32.trap">;
30160b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i64_trap
30170b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
30180b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30190b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i64.trap">;
30200b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i8_trap
30210b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
30220b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30230b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i8.trap">;
30240b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i16_trap
30250b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
30260b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30270b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i16.trap">;
30280b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i32_trap
30290b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
30300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30310b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i32.trap">;
30320b57cec5SDimitry Andric
30330b57cec5SDimitry Andricdef int_nvvm_suld_3d_i8_trap
30340b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
30350b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30360b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i8.trap">;
30370b57cec5SDimitry Andricdef int_nvvm_suld_3d_i16_trap
30380b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
30390b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30400b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i16.trap">;
30410b57cec5SDimitry Andricdef int_nvvm_suld_3d_i32_trap
30420b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
30430b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30440b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i32.trap">;
30450b57cec5SDimitry Andricdef int_nvvm_suld_3d_i64_trap
30460b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
30470b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30480b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i64.trap">;
30490b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i8_trap
30500b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
30510b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30520b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i8.trap">;
30530b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i16_trap
30540b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
30550b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30560b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i16.trap">;
30570b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i32_trap
30580b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
30590b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30600b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i32.trap">;
30610b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i64_trap
30620b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
30630b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30640b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i64.trap">;
30650b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i8_trap
30660b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
30670b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30680b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i8.trap">;
30690b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i16_trap
30700b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
30710b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30720b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i16.trap">;
30730b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i32_trap
30740b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
30750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
30760b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i32.trap">;
30770b57cec5SDimitry Andric
30780b57cec5SDimitry Andric// .zero variants
30790b57cec5SDimitry Andricdef int_nvvm_suld_1d_i8_zero
30800b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
30810b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
30820b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i8.zero">;
30830b57cec5SDimitry Andricdef int_nvvm_suld_1d_i16_zero
30840b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
30850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
30860b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i16.zero">;
30870b57cec5SDimitry Andricdef int_nvvm_suld_1d_i32_zero
30880b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
30890b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
30900b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i32.zero">;
30910b57cec5SDimitry Andricdef int_nvvm_suld_1d_i64_zero
30920b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
30930b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
30940b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.i64.zero">;
30950b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i8_zero
30960b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
30970b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
30980b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i8.zero">;
30990b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i16_zero
31000b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
31010b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31020b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i16.zero">;
31030b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i32_zero
31040b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
31050b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31060b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i32.zero">;
31070b57cec5SDimitry Andricdef int_nvvm_suld_1d_v2i64_zero
31080b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
31090b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31100b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v2i64.zero">;
31110b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i8_zero
31120b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
31130b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31140b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i8.zero">;
31150b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i16_zero
31160b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
31170b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31180b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i16.zero">;
31190b57cec5SDimitry Andricdef int_nvvm_suld_1d_v4i32_zero
31200b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
31210b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty], [],
31220b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.v4i32.zero">;
31230b57cec5SDimitry Andric
31240b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i8_zero
31250b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
31260b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31270b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i8.zero">;
31280b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i16_zero
31290b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
31300b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31310b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i16.zero">;
31320b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i32_zero
31330b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
31340b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31350b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i32.zero">;
31360b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_i64_zero
31370b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
31380b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31390b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.i64.zero">;
31400b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i8_zero
31410b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
31420b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31430b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i8.zero">;
31440b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i16_zero
31450b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
31460b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31470b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i16.zero">;
31480b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i32_zero
31490b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
31500b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31510b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i32.zero">;
31520b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v2i64_zero
31530b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
31540b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31550b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v2i64.zero">;
31560b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i8_zero
31570b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
31580b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31590b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i8.zero">;
31600b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i16_zero
31610b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
31620b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31630b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i16.zero">;
31640b57cec5SDimitry Andricdef int_nvvm_suld_1d_array_v4i32_zero
31650b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
31660b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31670b57cec5SDimitry Andric              "llvm.nvvm.suld.1d.array.v4i32.zero">;
31680b57cec5SDimitry Andric
31690b57cec5SDimitry Andricdef int_nvvm_suld_2d_i8_zero
31700b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
31710b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31720b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i8.zero">;
31730b57cec5SDimitry Andricdef int_nvvm_suld_2d_i16_zero
31740b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
31750b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31760b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i16.zero">;
31770b57cec5SDimitry Andricdef int_nvvm_suld_2d_i32_zero
31780b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
31790b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31800b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i32.zero">;
31810b57cec5SDimitry Andricdef int_nvvm_suld_2d_i64_zero
31820b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
31830b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31840b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.i64.zero">;
31850b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i8_zero
31860b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
31870b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31880b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i8.zero">;
31890b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i16_zero
31900b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
31910b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31920b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i16.zero">;
31930b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i32_zero
31940b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
31950b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
31960b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i32.zero">;
31970b57cec5SDimitry Andricdef int_nvvm_suld_2d_v2i64_zero
31980b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
31990b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
32000b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v2i64.zero">;
32010b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i8_zero
32020b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32030b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
32040b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i8.zero">;
32050b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i16_zero
32060b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32070b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
32080b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i16.zero">;
32090b57cec5SDimitry Andricdef int_nvvm_suld_2d_v4i32_zero
32100b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
32110b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
32120b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.v4i32.zero">;
32130b57cec5SDimitry Andric
32140b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i8_zero
32150b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
32160b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32170b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i8.zero">;
32180b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i16_zero
32190b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
32200b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32210b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i16.zero">;
32220b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i32_zero
32230b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
32240b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32250b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i32.zero">;
32260b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_i64_zero
32270b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
32280b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32290b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.i64.zero">;
32300b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i8_zero
32310b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
32320b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32330b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i8.zero">;
32340b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i16_zero
32350b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
32360b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32370b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i16.zero">;
32380b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i32_zero
32390b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
32400b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32410b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i32.zero">;
32420b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v2i64_zero
32430b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
32440b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32450b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v2i64.zero">;
32460b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i8_zero
32470b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32480b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32490b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i8.zero">;
32500b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i16_zero
32510b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32520b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32530b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i16.zero">;
32540b57cec5SDimitry Andricdef int_nvvm_suld_2d_array_v4i32_zero
32550b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
32560b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32570b57cec5SDimitry Andric              "llvm.nvvm.suld.2d.array.v4i32.zero">;
32580b57cec5SDimitry Andric
32590b57cec5SDimitry Andricdef int_nvvm_suld_3d_i8_zero
32600b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
32610b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32620b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i8.zero">;
32630b57cec5SDimitry Andricdef int_nvvm_suld_3d_i16_zero
32640b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty],
32650b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32660b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i16.zero">;
32670b57cec5SDimitry Andricdef int_nvvm_suld_3d_i32_zero
32680b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty],
32690b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32700b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i32.zero">;
32710b57cec5SDimitry Andricdef int_nvvm_suld_3d_i64_zero
32720b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty],
32730b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32740b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.i64.zero">;
32750b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i8_zero
32760b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
32770b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32780b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i8.zero">;
32790b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i16_zero
32800b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
32810b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32820b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i16.zero">;
32830b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i32_zero
32840b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
32850b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32860b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i32.zero">;
32870b57cec5SDimitry Andricdef int_nvvm_suld_3d_v2i64_zero
32880b57cec5SDimitry Andric  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
32890b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32900b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v2i64.zero">;
32910b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i8_zero
32920b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32930b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32940b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i8.zero">;
32950b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i16_zero
32960b57cec5SDimitry Andric  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
32970b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
32980b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i16.zero">;
32990b57cec5SDimitry Andricdef int_nvvm_suld_3d_v4i32_zero
33000b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
33010b57cec5SDimitry Andric              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
33020b57cec5SDimitry Andric              "llvm.nvvm.suld.3d.v4i32.zero">;
33030b57cec5SDimitry Andric
33040b57cec5SDimitry Andric//===- Texture Query ------------------------------------------------------===//
33050b57cec5SDimitry Andric
33060b57cec5SDimitry Andricdef int_nvvm_txq_channel_order
33070b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33080b57cec5SDimitry Andric              "llvm.nvvm.txq.channel.order">,
330981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_channel_order">;
33100b57cec5SDimitry Andricdef int_nvvm_txq_channel_data_type
33110b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33120b57cec5SDimitry Andric              "llvm.nvvm.txq.channel.data.type">,
331381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_channel_data_type">;
33140b57cec5SDimitry Andricdef int_nvvm_txq_width
33150b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33160b57cec5SDimitry Andric              "llvm.nvvm.txq.width">,
331781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_width">;
33180b57cec5SDimitry Andricdef int_nvvm_txq_height
33190b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33200b57cec5SDimitry Andric              "llvm.nvvm.txq.height">,
332181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_height">;
33220b57cec5SDimitry Andricdef int_nvvm_txq_depth
33230b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33240b57cec5SDimitry Andric              "llvm.nvvm.txq.depth">,
332581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_depth">;
33260b57cec5SDimitry Andricdef int_nvvm_txq_array_size
33270b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33280b57cec5SDimitry Andric              "llvm.nvvm.txq.array.size">,
332981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_array_size">;
33300b57cec5SDimitry Andricdef int_nvvm_txq_num_samples
33310b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33320b57cec5SDimitry Andric              "llvm.nvvm.txq.num.samples">,
333381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_num_samples">;
33340b57cec5SDimitry Andricdef int_nvvm_txq_num_mipmap_levels
33350b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33360b57cec5SDimitry Andric              "llvm.nvvm.txq.num.mipmap.levels">,
333781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_txq_num_mipmap_levels">;
33380b57cec5SDimitry Andric
33390b57cec5SDimitry Andric//===- Surface Query ------------------------------------------------------===//
33400b57cec5SDimitry Andric
33410b57cec5SDimitry Andricdef int_nvvm_suq_channel_order
33420b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33430b57cec5SDimitry Andric              "llvm.nvvm.suq.channel.order">,
334481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_channel_order">;
33450b57cec5SDimitry Andricdef int_nvvm_suq_channel_data_type
33460b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33470b57cec5SDimitry Andric              "llvm.nvvm.suq.channel.data.type">,
334881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_channel_data_type">;
33490b57cec5SDimitry Andricdef int_nvvm_suq_width
33500b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33510b57cec5SDimitry Andric              "llvm.nvvm.suq.width">,
335281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_width">;
33530b57cec5SDimitry Andricdef int_nvvm_suq_height
33540b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33550b57cec5SDimitry Andric              "llvm.nvvm.suq.height">,
335681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_height">;
33570b57cec5SDimitry Andricdef int_nvvm_suq_depth
33580b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33590b57cec5SDimitry Andric              "llvm.nvvm.suq.depth">,
336081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_depth">;
33610b57cec5SDimitry Andricdef int_nvvm_suq_array_size
33620b57cec5SDimitry Andric  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
33630b57cec5SDimitry Andric              "llvm.nvvm.suq.array.size">,
336481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_suq_array_size">;
33650b57cec5SDimitry Andric
33660b57cec5SDimitry Andric
33670b57cec5SDimitry Andric//===- Handle Query -------------------------------------------------------===//
33680b57cec5SDimitry Andric
33690b57cec5SDimitry Andricdef int_nvvm_istypep_sampler
33700b57cec5SDimitry Andric  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
33710b57cec5SDimitry Andric              "llvm.nvvm.istypep.sampler">,
337281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_istypep_sampler">;
33730b57cec5SDimitry Andricdef int_nvvm_istypep_surface
33740b57cec5SDimitry Andric  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
33750b57cec5SDimitry Andric              "llvm.nvvm.istypep.surface">,
337681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_istypep_surface">;
33770b57cec5SDimitry Andricdef int_nvvm_istypep_texture
33780b57cec5SDimitry Andric  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
33790b57cec5SDimitry Andric              "llvm.nvvm.istypep.texture">,
338081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_istypep_texture">;
33810b57cec5SDimitry Andric
33820b57cec5SDimitry Andric
33830b57cec5SDimitry Andric
33840b57cec5SDimitry Andric//===- Surface Stores -----------------------------------------------------===//
33850b57cec5SDimitry Andric
33860b57cec5SDimitry Andric// Unformatted
33870b57cec5SDimitry Andric// .clamp variant
33880b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i8_clamp
33890b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
33900b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i8.clamp">,
339181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i8_clamp">;
33920b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i16_clamp
33930b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
33940b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i16.clamp">,
339581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i16_clamp">;
33960b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i32_clamp
33970b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
33980b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i32.clamp">,
339981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i32_clamp">;
34000b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i64_clamp
34010b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
34020b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i64.clamp">,
340381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i64_clamp">;
34040b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i8_clamp
34050b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
34060b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i8.clamp">,
340781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_clamp">;
34080b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i16_clamp
34090b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
34100b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i16.clamp">,
341181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_clamp">;
34120b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i32_clamp
34130b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
34140b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i32.clamp">,
341581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_clamp">;
34160b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i64_clamp
34170b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
34180b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i64.clamp">,
341981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_clamp">;
34200b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i8_clamp
34210b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
34220b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
34230b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i8.clamp">,
342481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_clamp">;
34250b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i16_clamp
34260b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
34270b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
34280b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i16.clamp">,
342981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_clamp">;
34300b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i32_clamp
34310b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
34320b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
34330b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i32.clamp">,
343481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_clamp">;
34350b57cec5SDimitry Andric
34360b57cec5SDimitry Andric
34370b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i8_clamp
34380b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
34390b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i8.clamp">,
344081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_clamp">;
34410b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i16_clamp
34420b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
34430b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i16.clamp">,
344481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_clamp">;
34450b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i32_clamp
34460b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
34470b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i32.clamp">,
344881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_clamp">;
34490b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i64_clamp
34500b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
34510b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i64.clamp">,
345281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_clamp">;
34530b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i8_clamp
34540b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
34550b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
34560b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i8.clamp">,
345781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_clamp">;
34580b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i16_clamp
34590b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
34600b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
34610b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i16.clamp">,
346281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_clamp">;
34630b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i32_clamp
34640b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
34650b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
34660b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i32.clamp">,
346781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_clamp">;
34680b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i64_clamp
34690b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
34700b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
34710b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i64.clamp">,
347281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_clamp">;
34730b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i8_clamp
34740b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
34750b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
34760b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i8.clamp">,
347781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_clamp">;
34780b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i16_clamp
34790b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
34800b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
34810b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i16.clamp">,
348281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_clamp">;
34830b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i32_clamp
34840b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
34850b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
34860b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i32.clamp">,
348781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_clamp">;
34880b57cec5SDimitry Andric
34890b57cec5SDimitry Andric
34900b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i8_clamp
34910b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
34920b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i8.clamp">,
349381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i8_clamp">;
34940b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i16_clamp
34950b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
34960b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i16.clamp">,
349781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i16_clamp">;
34980b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i32_clamp
34990b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
35000b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i32.clamp">,
350181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i32_clamp">;
35020b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i64_clamp
35030b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
35040b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i64.clamp">,
350581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i64_clamp">;
35060b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i8_clamp
35070b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35080b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
35090b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i8.clamp">,
351081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_clamp">;
35110b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i16_clamp
35120b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35130b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
35140b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i16.clamp">,
351581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_clamp">;
35160b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i32_clamp
35170b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35180b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
35190b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i32.clamp">,
352081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_clamp">;
35210b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i64_clamp
35220b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35230b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
35240b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i64.clamp">,
352581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_clamp">;
35260b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i8_clamp
35270b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
35280b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
35290b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i8.clamp">,
353081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_clamp">;
35310b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i16_clamp
35320b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
35330b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
35340b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i16.clamp">,
353581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_clamp">;
35360b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i32_clamp
35370b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35380b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
35390b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i32.clamp">,
354081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_clamp">;
35410b57cec5SDimitry Andric
35420b57cec5SDimitry Andric
35430b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i8_clamp
35440b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35450b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
35460b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i8.clamp">,
354781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_clamp">;
35480b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i16_clamp
35490b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35500b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
35510b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i16.clamp">,
355281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_clamp">;
35530b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i32_clamp
35540b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35550b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
35560b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i32.clamp">,
355781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_clamp">;
35580b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i64_clamp
35590b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
35600b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
35610b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i64.clamp">,
356281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_clamp">;
35630b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i8_clamp
35640b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35650b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
35660b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i8.clamp">,
356781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_clamp">;
35680b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i16_clamp
35690b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35700b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
35710b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i16.clamp">,
357281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_clamp">;
35730b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i32_clamp
35740b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35750b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
35760b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i32.clamp">,
357781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_clamp">;
35780b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i64_clamp
35790b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35800b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
35810b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i64.clamp">,
358281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_clamp">;
35830b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i8_clamp
35840b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35850b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
35860b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i8.clamp">,
358781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_clamp">;
35880b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i16_clamp
35890b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35900b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
35910b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i16.clamp">,
359281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_clamp">;
35930b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i32_clamp
35940b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
35950b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
35960b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i32.clamp">,
359781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_clamp">;
35980b57cec5SDimitry Andric
35990b57cec5SDimitry Andric
36000b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i8_clamp
36010b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
36020b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
36030b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i8.clamp">,
360481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i8_clamp">;
36050b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i16_clamp
36060b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
36070b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
36080b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i16.clamp">,
360981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i16_clamp">;
36100b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i32_clamp
36110b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
36120b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
36130b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i32.clamp">,
361481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i32_clamp">;
36150b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i64_clamp
36160b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
36170b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
36180b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i64.clamp">,
361981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i64_clamp">;
36200b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i8_clamp
36210b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36220b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
36230b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i8.clamp">,
362481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_clamp">;
36250b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i16_clamp
36260b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36270b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
36280b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i16.clamp">,
362981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_clamp">;
36300b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i32_clamp
36310b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36320b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
36330b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i32.clamp">,
363481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_clamp">;
36350b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i64_clamp
36360b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36370b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
36380b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i64.clamp">,
363981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_clamp">;
36400b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i8_clamp
36410b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36420b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
36430b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i8.clamp">,
364481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_clamp">;
36450b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i16_clamp
36460b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36470b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
36480b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i16.clamp">,
364981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_clamp">;
36500b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i32_clamp
36510b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
36520b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
36530b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i32.clamp">,
365481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_clamp">;
36550b57cec5SDimitry Andric
36560b57cec5SDimitry Andric
36570b57cec5SDimitry Andric// .trap variant
36580b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i8_trap
36590b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
36600b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i8.trap">,
366181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i8_trap">;
36620b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i16_trap
36630b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
36640b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i16.trap">,
366581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i16_trap">;
36660b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i32_trap
36670b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
36680b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i32.trap">,
366981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i32_trap">;
36700b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i64_trap
36710b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
36720b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i64.trap">,
367381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i64_trap">;
36740b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i8_trap
36750b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
36760b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i8.trap">,
367781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
36780b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i16_trap
36790b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
36800b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i16.trap">,
368181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
36820b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i32_trap
36830b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
36840b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i32.trap">,
368581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
36860b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i64_trap
36870b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
36880b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i64.trap">,
368981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_trap">;
36900b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i8_trap
36910b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
36920b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
36930b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i8.trap">,
369481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
36950b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i16_trap
36960b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
36970b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
36980b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i16.trap">,
369981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
37000b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i32_trap
37010b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37020b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
37030b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i32.trap">,
370481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
37050b57cec5SDimitry Andric
37060b57cec5SDimitry Andric
37070b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i8_trap
37080b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
37090b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i8.trap">,
371081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
37110b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i16_trap
37120b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
37130b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i16.trap">,
371481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
37150b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i32_trap
37160b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
37170b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i32.trap">,
371881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
37190b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i64_trap
37200b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
37210b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i64.trap">,
372281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_trap">;
37230b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i8_trap
37240b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37250b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
37260b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
372781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
37280b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i16_trap
37290b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37300b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
37310b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
373281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
37330b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i32_trap
37340b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37350b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
37360b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
373781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
37380b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i64_trap
37390b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37400b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
37410b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i64.trap">,
374281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_trap">;
37430b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i8_trap
37440b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
37450b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
37460b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
374781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
37480b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i16_trap
37490b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
37500b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
37510b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
375281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
37530b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i32_trap
37540b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
37550b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
37560b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
375781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
37580b57cec5SDimitry Andric
37590b57cec5SDimitry Andric
37600b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i8_trap
37610b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
37620b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i8.trap">,
376381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i8_trap">;
37640b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i16_trap
37650b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
37660b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i16.trap">,
376781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i16_trap">;
37680b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i32_trap
37690b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
37700b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i32.trap">,
377181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i32_trap">;
37720b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i64_trap
37730b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
37740b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i64.trap">,
377581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i64_trap">;
37760b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i8_trap
37770b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37780b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
37790b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i8.trap">,
378081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
37810b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i16_trap
37820b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37830b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
37840b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i16.trap">,
378581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
37860b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i32_trap
37870b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37880b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
37890b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i32.trap">,
379081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
37910b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i64_trap
37920b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
37930b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
37940b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i64.trap">,
379581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_trap">;
37960b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i8_trap
37970b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
37980b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
37990b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i8.trap">,
380081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
38010b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i16_trap
38020b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
38030b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
38040b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i16.trap">,
380581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
38060b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i32_trap
38070b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38080b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
38090b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i32.trap">,
381081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
38110b57cec5SDimitry Andric
38120b57cec5SDimitry Andric
38130b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i8_trap
38140b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38150b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
38160b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i8.trap">,
381781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
38180b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i16_trap
38190b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38200b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
38210b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i16.trap">,
382281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
38230b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i32_trap
38240b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38250b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
38260b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i32.trap">,
382781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
38280b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i64_trap
38290b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38300b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
38310b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i64.trap">,
383281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_trap">;
38330b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i8_trap
38340b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38350b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
38360b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
383781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
38380b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i16_trap
38390b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38400b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
38410b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
384281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
38430b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i32_trap
38440b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38450b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
38460b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
384781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
38480b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i64_trap
38490b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38500b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
38510b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i64.trap">,
385281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_trap">;
38530b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i8_trap
38540b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38550b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
38560b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
385781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
38580b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i16_trap
38590b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38600b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
38610b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
386281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
38630b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i32_trap
38640b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38650b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
38660b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
386781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
38680b57cec5SDimitry Andric
38690b57cec5SDimitry Andric
38700b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i8_trap
38710b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38720b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
38730b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i8.trap">,
387481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i8_trap">;
38750b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i16_trap
38760b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38770b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
38780b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i16.trap">,
387981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i16_trap">;
38800b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i32_trap
38810b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38820b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
38830b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i32.trap">,
388481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i32_trap">;
38850b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i64_trap
38860b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
38870b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
38880b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i64.trap">,
388981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i64_trap">;
38900b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i8_trap
38910b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38920b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
38930b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i8.trap">,
389481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
38950b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i16_trap
38960b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
38970b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
38980b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i16.trap">,
389981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
39000b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i32_trap
39010b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
39020b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
39030b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i32.trap">,
390481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
39050b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i64_trap
39060b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
39070b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
39080b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i64.trap">,
390981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_trap">;
39100b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i8_trap
39110b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
39120b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
39130b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i8.trap">,
391481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
39150b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i16_trap
39160b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
39170b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
39180b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i16.trap">,
391981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
39200b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i32_trap
39210b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
39220b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
39230b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i32.trap">,
392481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
39250b57cec5SDimitry Andric
39260b57cec5SDimitry Andric
39270b57cec5SDimitry Andric// .zero variant
39280b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i8_zero
39290b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
39300b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i8.zero">,
393181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i8_zero">;
39320b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i16_zero
39330b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
39340b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i16.zero">,
393581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i16_zero">;
39360b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i32_zero
39370b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
39380b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i32.zero">,
393981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i32_zero">;
39400b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_i64_zero
39410b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
39420b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.i64.zero">,
394381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_i64_zero">;
39440b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i8_zero
39450b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
39460b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i8.zero">,
394781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_zero">;
39480b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i16_zero
39490b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
39500b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i16.zero">,
395181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_zero">;
39520b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i32_zero
39530b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
39540b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i32.zero">,
395581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_zero">;
39560b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v2i64_zero
39570b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
39580b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v2i64.zero">,
395981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_zero">;
39600b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i8_zero
39610b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
39620b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
39630b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i8.zero">,
396481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_zero">;
39650b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i16_zero
39660b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
39670b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
39680b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i16.zero">,
396981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_zero">;
39700b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_v4i32_zero
39710b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
39720b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
39730b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.v4i32.zero">,
397481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_zero">;
39750b57cec5SDimitry Andric
39760b57cec5SDimitry Andric
39770b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i8_zero
39780b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
39790b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i8.zero">,
398081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_zero">;
39810b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i16_zero
39820b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
39830b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i16.zero">,
398481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_zero">;
39850b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i32_zero
39860b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
39870b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i32.zero">,
398881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_zero">;
39890b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_i64_zero
39900b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
39910b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.i64.zero">,
399281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_zero">;
39930b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i8_zero
39940b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
39950b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
39960b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i8.zero">,
399781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_zero">;
39980b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i16_zero
39990b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40000b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
40010b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i16.zero">,
400281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_zero">;
40030b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i32_zero
40040b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40050b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
40060b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i32.zero">,
400781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_zero">;
40080b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v2i64_zero
40090b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40100b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
40110b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v2i64.zero">,
401281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_zero">;
40130b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i8_zero
40140b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
40150b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
40160b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i8.zero">,
401781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_zero">;
40180b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i16_zero
40190b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
40200b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
40210b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i16.zero">,
402281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_zero">;
40230b57cec5SDimitry Andricdef int_nvvm_sust_b_1d_array_v4i32_zero
40240b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
40250b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
40260b57cec5SDimitry Andric              "llvm.nvvm.sust.b.1d.array.v4i32.zero">,
402781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_zero">;
40280b57cec5SDimitry Andric
40290b57cec5SDimitry Andric
40300b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i8_zero
40310b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
40320b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i8.zero">,
403381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i8_zero">;
40340b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i16_zero
40350b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
40360b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i16.zero">,
403781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i16_zero">;
40380b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i32_zero
40390b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
40400b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i32.zero">,
404181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i32_zero">;
40420b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_i64_zero
40430b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
40440b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.i64.zero">,
404581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_i64_zero">;
40460b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i8_zero
40470b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40480b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
40490b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i8.zero">,
405081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_zero">;
40510b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i16_zero
40520b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40530b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
40540b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i16.zero">,
405581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_zero">;
40560b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i32_zero
40570b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40580b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
40590b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i32.zero">,
406081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_zero">;
40610b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v2i64_zero
40620b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40630b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
40640b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v2i64.zero">,
406581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_zero">;
40660b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i8_zero
40670b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
40680b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
40690b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i8.zero">,
407081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_zero">;
40710b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i16_zero
40720b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
40730b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
40740b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i16.zero">,
407581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_zero">;
40760b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_v4i32_zero
40770b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
40780b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
40790b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.v4i32.zero">,
408081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_zero">;
40810b57cec5SDimitry Andric
40820b57cec5SDimitry Andric
40830b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i8_zero
40840b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40850b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
40860b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i8.zero">,
408781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_zero">;
40880b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i16_zero
40890b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40900b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
40910b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i16.zero">,
409281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_zero">;
40930b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i32_zero
40940b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
40950b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
40960b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i32.zero">,
409781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_zero">;
40980b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_i64_zero
40990b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
41000b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
41010b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.i64.zero">,
410281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_zero">;
41030b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i8_zero
41040b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41050b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
41060b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i8.zero">,
410781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_zero">;
41080b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i16_zero
41090b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41100b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
41110b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i16.zero">,
411281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_zero">;
41130b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i32_zero
41140b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41150b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
41160b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i32.zero">,
411781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_zero">;
41180b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v2i64_zero
41190b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41200b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
41210b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v2i64.zero">,
412281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_zero">;
41230b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i8_zero
41240b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41250b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
41260b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i8.zero">,
412781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_zero">;
41280b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i16_zero
41290b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41300b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
41310b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i16.zero">,
413281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_zero">;
41330b57cec5SDimitry Andricdef int_nvvm_sust_b_2d_array_v4i32_zero
41340b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41350b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
41360b57cec5SDimitry Andric              "llvm.nvvm.sust.b.2d.array.v4i32.zero">,
413781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_zero">;
41380b57cec5SDimitry Andric
41390b57cec5SDimitry Andric
41400b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i8_zero
41410b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
41420b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
41430b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i8.zero">,
414481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i8_zero">;
41450b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i16_zero
41460b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
41470b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
41480b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i16.zero">,
414981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i16_zero">;
41500b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i32_zero
41510b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
41520b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
41530b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i32.zero">,
415481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i32_zero">;
41550b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_i64_zero
41560b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
41570b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i64_ty], [],
41580b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.i64.zero">,
415981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_i64_zero">;
41600b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i8_zero
41610b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41620b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
41630b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i8.zero">,
416481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_zero">;
41650b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i16_zero
41660b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41670b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
41680b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i16.zero">,
416981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_zero">;
41700b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i32_zero
41710b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41720b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
41730b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i32.zero">,
417481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_zero">;
41750b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v2i64_zero
41760b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41770b57cec5SDimitry Andric                   llvm_i64_ty, llvm_i64_ty], [],
41780b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v2i64.zero">,
417981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_zero">;
41800b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i8_zero
41810b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41820b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
41830b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i8.zero">,
418481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_zero">;
41850b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i16_zero
41860b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41870b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
41880b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i16.zero">,
418981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_zero">;
41900b57cec5SDimitry Andricdef int_nvvm_sust_b_3d_v4i32_zero
41910b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
41920b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
41930b57cec5SDimitry Andric              "llvm.nvvm.sust.b.3d.v4i32.zero">,
419481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_zero">;
41950b57cec5SDimitry Andric
41960b57cec5SDimitry Andric
41970b57cec5SDimitry Andric
41980b57cec5SDimitry Andric// Formatted
41990b57cec5SDimitry Andric
42000b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_i8_trap
42010b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
42020b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.i8.trap">,
420381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_i8_trap">;
42040b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_i16_trap
42050b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
42060b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.i16.trap">,
420781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_i16_trap">;
42080b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_i32_trap
42090b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
42100b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.i32.trap">,
421181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_i32_trap">;
42120b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v2i8_trap
42130b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
42140b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v2i8.trap">,
421581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
42160b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v2i16_trap
42170b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
42180b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v2i16.trap">,
421981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
42200b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v2i32_trap
42210b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
42220b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v2i32.trap">,
422381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
42240b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v4i8_trap
42250b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
42260b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
42270b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v4i8.trap">,
422881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
42290b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v4i16_trap
42300b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
42310b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
42320b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v4i16.trap">,
423381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
42340b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_v4i32_trap
42350b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
42360b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
42370b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.v4i32.trap">,
423881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
42390b57cec5SDimitry Andric
42400b57cec5SDimitry Andric
42410b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_i8_trap
42420b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
42430b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.i8.trap">,
424481ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
42450b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_i16_trap
42460b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
42470b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.i16.trap">,
424881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
42490b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_i32_trap
42500b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
42510b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.i32.trap">,
425281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
42530b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v2i8_trap
42540b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
42550b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
42560b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
425781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
42580b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v2i16_trap
42590b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
42600b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
42610b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
426281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
42630b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v2i32_trap
42640b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
42650b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
42660b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
426781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
42680b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v4i8_trap
42690b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
42700b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
42710b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
427281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
42730b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v4i16_trap
42740b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
42750b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
42760b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
427781ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
42780b57cec5SDimitry Andricdef int_nvvm_sust_p_1d_array_v4i32_trap
42790b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
42800b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
42810b57cec5SDimitry Andric              "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
428281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
42830b57cec5SDimitry Andric
42840b57cec5SDimitry Andric
42850b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_i8_trap
42860b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
42870b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.i8.trap">,
428881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_i8_trap">;
42890b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_i16_trap
42900b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
42910b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.i16.trap">,
429281ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_i16_trap">;
42930b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_i32_trap
42940b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
42950b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.i32.trap">,
429681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_i32_trap">;
42970b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v2i8_trap
42980b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
42990b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43000b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v2i8.trap">,
430181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
43020b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v2i16_trap
43030b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43040b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43050b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v2i16.trap">,
430681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
43070b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v2i32_trap
43080b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43090b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
43100b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v2i32.trap">,
431181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
43120b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v4i8_trap
43130b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
43140b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
43150b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v4i8.trap">,
431681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
43170b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v4i16_trap
43180b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
43190b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
43200b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v4i16.trap">,
432181ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
43220b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_v4i32_trap
43230b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43240b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
43250b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.v4i32.trap">,
432681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
43270b57cec5SDimitry Andric
43280b57cec5SDimitry Andric
43290b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_i8_trap
43300b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43310b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
43320b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.i8.trap">,
433381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
43340b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_i16_trap
43350b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43360b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
43370b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.i16.trap">,
433881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
43390b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_i32_trap
43400b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43410b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
43420b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.i32.trap">,
434381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
43440b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v2i8_trap
43450b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43460b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43470b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
434881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
43490b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v2i16_trap
43500b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43510b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43520b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
435381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
43540b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v2i32_trap
43550b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43560b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
43570b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
435881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
43590b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v4i8_trap
43600b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43610b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
43620b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
436381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
43640b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v4i16_trap
43650b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43660b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
43670b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
436881ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
43690b57cec5SDimitry Andricdef int_nvvm_sust_p_2d_array_v4i32_trap
43700b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43710b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
43720b57cec5SDimitry Andric              "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
437381ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
43740b57cec5SDimitry Andric
43750b57cec5SDimitry Andric
43760b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_i8_trap
43770b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43780b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
43790b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.i8.trap">,
438081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_i8_trap">;
43810b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_i16_trap
43820b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43830b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i16_ty], [],
43840b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.i16.trap">,
438581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_i16_trap">;
43860b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_i32_trap
43870b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
43880b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
43890b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.i32.trap">,
439081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_i32_trap">;
43910b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v2i8_trap
43920b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43930b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43940b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v2i8.trap">,
439581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
43960b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v2i16_trap
43970b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
43980b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty], [],
43990b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v2i16.trap">,
440081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
44010b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v2i32_trap
44020b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
44030b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty], [],
44040b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v2i32.trap">,
440581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
44060b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v4i8_trap
44070b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
44080b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
44090b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v4i8.trap">,
441081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
44110b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v4i16_trap
44120b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
44130b57cec5SDimitry Andric                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
44140b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v4i16.trap">,
441581ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
44160b57cec5SDimitry Andricdef int_nvvm_sust_p_3d_v4i32_trap
44170b57cec5SDimitry Andric  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
44180b57cec5SDimitry Andric                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
44190b57cec5SDimitry Andric              "llvm.nvvm.sust.p.3d.v4i32.trap">,
442081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
44210b57cec5SDimitry Andric
44220b57cec5SDimitry Andric
44230b57cec5SDimitry Andricdef int_nvvm_rotate_b32
4424349cc55cSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4425349cc55cSDimitry Andric              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b32">,
442681ad6265SDimitry Andric              ClangBuiltin<"__nvvm_rotate_b32">;
44270b57cec5SDimitry Andric
44280b57cec5SDimitry Andricdef int_nvvm_rotate_b64
4429349cc55cSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4430349cc55cSDimitry Andric             [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b64">,
443181ad6265SDimitry Andric             ClangBuiltin<"__nvvm_rotate_b64">;
44320b57cec5SDimitry Andric
44330b57cec5SDimitry Andricdef int_nvvm_rotate_right_b64
4434349cc55cSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4435349cc55cSDimitry Andric              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.right.b64">,
443681ad6265SDimitry Andric              ClangBuiltin<"__nvvm_rotate_right_b64">;
44370b57cec5SDimitry Andric
44380b57cec5SDimitry Andricdef int_nvvm_swap_lo_hi_b64
4439349cc55cSDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty],
4440349cc55cSDimitry Andric              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.swap.lo.hi.b64">,
444181ad6265SDimitry Andric              ClangBuiltin<"__nvvm_swap_lo_hi_b64">;
44420b57cec5SDimitry Andric
44430b57cec5SDimitry Andric
44440b57cec5SDimitry Andric// Accessing special registers.
444506c3fb27SDimitry Andric
444606c3fb27SDimitry Andricclass PTXReadSRegIntrinsicNB_r32
444706c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>;
444806c3fb27SDimitry Andricclass PTXReadSRegIntrinsic_r32<string name>
444906c3fb27SDimitry Andric  : PTXReadSRegIntrinsicNB_r32, ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
445006c3fb27SDimitry Andric
44510b57cec5SDimitry Andricmulticlass PTXReadSRegIntrinsic_v4i32<string regname> {
44520b57cec5SDimitry Andric// FIXME: Do we need the 128-bit integer type version?
4453349cc55cSDimitry Andric//    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem, IntrSpeculatable]>;
44540b57cec5SDimitry Andric
44550b57cec5SDimitry Andric// FIXME: Enable this once v4i32 support is enabled in back-end.
4456349cc55cSDimitry Andric//    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem, IntrSpeculatable]>;
445706c3fb27SDimitry Andric  foreach suffix = ["_x", "_y", "_z", "_w"] in
445806c3fb27SDimitry Andric    def suffix : PTXReadSRegIntrinsic_r32<regname # suffix>;
44590b57cec5SDimitry Andric}
44600b57cec5SDimitry Andric
446106c3fb27SDimitry Andric// Same, but without automatic clang builtins. It will be used for
446206c3fb27SDimitry Andric// registers that require particular GPU or PTX version.
446306c3fb27SDimitry Andricmulticlass PTXReadSRegIntrinsicNB_v4i32 {
446406c3fb27SDimitry Andric  foreach suffix = ["_x", "_y", "_z", "_w"] in
446506c3fb27SDimitry Andric    def suffix : PTXReadSRegIntrinsicNB_r32;
446606c3fb27SDimitry Andric}
446706c3fb27SDimitry Andric
44680b57cec5SDimitry Andricclass PTXReadSRegIntrinsic_r64<string name>
446906c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i64_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>,
447081ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
44710b57cec5SDimitry Andric
44720b57cec5SDimitry Andric// Intrinsics to read registers with non-constant values. E.g. the values that
44730b57cec5SDimitry Andric// do change over the kernel lifetime. Such reads should not be CSE'd.
44740b57cec5SDimitry Andricclass PTXReadNCSRegIntrinsic_r32<string name>
447506c3fb27SDimitry Andric  : Intrinsic<[llvm_i32_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
447681ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
44770b57cec5SDimitry Andricclass PTXReadNCSRegIntrinsic_r64<string name>
447806c3fb27SDimitry Andric  : Intrinsic<[llvm_i64_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
447981ad6265SDimitry Andric    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
44800b57cec5SDimitry Andric
44810b57cec5SDimitry Andricdefm int_nvvm_read_ptx_sreg_tid : PTXReadSRegIntrinsic_v4i32<"tid">;
44820b57cec5SDimitry Andricdefm int_nvvm_read_ptx_sreg_ntid : PTXReadSRegIntrinsic_v4i32<"ntid">;
44830b57cec5SDimitry Andric
44840b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_laneid : PTXReadSRegIntrinsic_r32<"laneid">;
44850b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_warpid : PTXReadSRegIntrinsic_r32<"warpid">;
44860b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_nwarpid : PTXReadSRegIntrinsic_r32<"nwarpid">;
44870b57cec5SDimitry Andric
44880b57cec5SDimitry Andricdefm int_nvvm_read_ptx_sreg_ctaid : PTXReadSRegIntrinsic_v4i32<"ctaid">;
44890b57cec5SDimitry Andricdefm int_nvvm_read_ptx_sreg_nctaid : PTXReadSRegIntrinsic_v4i32<"nctaid">;
44900b57cec5SDimitry Andric
44910b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_smid : PTXReadSRegIntrinsic_r32<"smid">;
44920b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_nsmid : PTXReadSRegIntrinsic_r32<"nsmid">;
44930b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_gridid : PTXReadSRegIntrinsic_r32<"gridid">;
44940b57cec5SDimitry Andric
44950b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_lanemask_eq :
44960b57cec5SDimitry Andric    PTXReadSRegIntrinsic_r32<"lanemask_eq">;
44970b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_lanemask_le :
44980b57cec5SDimitry Andric    PTXReadSRegIntrinsic_r32<"lanemask_le">;
44990b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_lanemask_lt :
45000b57cec5SDimitry Andric    PTXReadSRegIntrinsic_r32<"lanemask_lt">;
45010b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_lanemask_ge :
45020b57cec5SDimitry Andric    PTXReadSRegIntrinsic_r32<"lanemask_ge">;
45030b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_lanemask_gt :
45040b57cec5SDimitry Andric    PTXReadSRegIntrinsic_r32<"lanemask_gt">;
45050b57cec5SDimitry Andric
45060b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_clock : PTXReadNCSRegIntrinsic_r32<"clock">;
45070b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_clock64 : PTXReadNCSRegIntrinsic_r64<"clock64">;
45080b57cec5SDimitry Andric
45090b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_pm0 : PTXReadNCSRegIntrinsic_r32<"pm0">;
45100b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_pm1 : PTXReadNCSRegIntrinsic_r32<"pm1">;
45110b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_pm2 : PTXReadNCSRegIntrinsic_r32<"pm2">;
45120b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_pm3 : PTXReadNCSRegIntrinsic_r32<"pm3">;
45130b57cec5SDimitry Andric
45140b57cec5SDimitry Andricdef int_nvvm_read_ptx_sreg_warpsize : PTXReadSRegIntrinsic_r32<"warpsize">;
45150b57cec5SDimitry Andric
451606c3fb27SDimitry Andric// sm90+, PTX7.8+
451706c3fb27SDimitry Andricdefm int_nvvm_read_ptx_sreg_clusterid : PTXReadSRegIntrinsicNB_v4i32;
451806c3fb27SDimitry Andricdefm int_nvvm_read_ptx_sreg_nclusterid : PTXReadSRegIntrinsicNB_v4i32;
451906c3fb27SDimitry Andricdefm int_nvvm_read_ptx_sreg_cluster_ctaid : PTXReadSRegIntrinsicNB_v4i32;
452006c3fb27SDimitry Andricdefm int_nvvm_read_ptx_sreg_cluster_nctaid : PTXReadSRegIntrinsicNB_v4i32;
452106c3fb27SDimitry Andric
452206c3fb27SDimitry Andricdef int_nvvm_read_ptx_sreg_cluster_ctarank : PTXReadSRegIntrinsicNB_r32;
452306c3fb27SDimitry Andricdef int_nvvm_read_ptx_sreg_cluster_nctarank : PTXReadSRegIntrinsicNB_r32;
452406c3fb27SDimitry Andric
45250b57cec5SDimitry Andric//
45260b57cec5SDimitry Andric// SHUFFLE
45270b57cec5SDimitry Andric//
45288bcb0991SDimitry Andric// Generate intrinsics for all variants of shfl instruction.
4529e8d8bef9SDimitry Andricforeach sync = [false, true] in {
45308bcb0991SDimitry Andric  foreach mode = ["up", "down", "bfly", "idx"] in {
45318bcb0991SDimitry Andric    foreach type = ["i32", "f32"] in {
4532e8d8bef9SDimitry Andric      foreach return_pred = [false, true] in {
45338bcb0991SDimitry Andric        foreach i = [SHFL_INFO<sync, mode, type, return_pred>] in {
4534e8d8bef9SDimitry Andric          if i.withGccBuiltin then {
453581ad6265SDimitry Andric            def i.Name : ClangBuiltin<i.Builtin>,
45368bcb0991SDimitry Andric                         Intrinsic<i.RetTy, i.ArgsTy,
453781ad6265SDimitry Andric                                   [IntrInaccessibleMemOnly, IntrConvergent,
453881ad6265SDimitry Andric                                   IntrNoCallback],
45398bcb0991SDimitry Andric                                   i.IntrName>;
45408bcb0991SDimitry Andric          }
4541e8d8bef9SDimitry Andric          if i.withoutGccBuiltin then {
45428bcb0991SDimitry Andric            def i.Name : Intrinsic<i.RetTy, i.ArgsTy,
454381ad6265SDimitry Andric                         [IntrInaccessibleMemOnly, IntrConvergent,
454481ad6265SDimitry Andric                         IntrNoCallback], i.IntrName>;
45458bcb0991SDimitry Andric          }
45468bcb0991SDimitry Andric        }
45478bcb0991SDimitry Andric      }
45488bcb0991SDimitry Andric    }
45498bcb0991SDimitry Andric  }
45508bcb0991SDimitry Andric}
45510b57cec5SDimitry Andric
45520b57cec5SDimitry Andric//
45530b57cec5SDimitry Andric// VOTE
45540b57cec5SDimitry Andric//
45550b57cec5SDimitry Andric
45560b57cec5SDimitry Andric// vote.all pred
45570b57cec5SDimitry Andricdef int_nvvm_vote_all :
45580b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
455981ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all">,
456081ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_all">;
45610b57cec5SDimitry Andric// vote.any pred
45620b57cec5SDimitry Andricdef int_nvvm_vote_any :
45630b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
456481ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any">,
456581ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_any">;
45660b57cec5SDimitry Andric// vote.uni pred
45670b57cec5SDimitry Andricdef int_nvvm_vote_uni :
45680b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
456981ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni">,
457081ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_uni">;
45710b57cec5SDimitry Andric// vote.ballot pred
45720b57cec5SDimitry Andricdef int_nvvm_vote_ballot :
45730b57cec5SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i1_ty],
457481ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot">,
457581ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_ballot">;
45760b57cec5SDimitry Andric
45770b57cec5SDimitry Andric//
45780b57cec5SDimitry Andric// VOTE.SYNC
45790b57cec5SDimitry Andric//
45800b57cec5SDimitry Andric
45810b57cec5SDimitry Andric// vote.sync.all mask, pred
45820b57cec5SDimitry Andricdef int_nvvm_vote_all_sync :
45830b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
458481ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all.sync">,
458581ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_all_sync">;
45860b57cec5SDimitry Andric// vote.sync.any mask, pred
45870b57cec5SDimitry Andricdef int_nvvm_vote_any_sync :
45880b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
458981ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any.sync">,
459081ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_any_sync">;
45910b57cec5SDimitry Andric// vote.sync.uni mask, pred
45920b57cec5SDimitry Andricdef int_nvvm_vote_uni_sync :
45930b57cec5SDimitry Andric  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
459481ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni.sync">,
459581ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_uni_sync">;
45960b57cec5SDimitry Andric// vote.sync.ballot mask, pred
45970b57cec5SDimitry Andricdef int_nvvm_vote_ballot_sync :
45980b57cec5SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i1_ty],
459981ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot.sync">,
460081ad6265SDimitry Andric  ClangBuiltin<"__nvvm_vote_ballot_sync">;
46010b57cec5SDimitry Andric
46020b57cec5SDimitry Andric//
46030b57cec5SDimitry Andric// MATCH.SYNC
46040b57cec5SDimitry Andric//
46050b57cec5SDimitry Andric// match.any.sync.b32 mask, value
46060b57cec5SDimitry Andricdef int_nvvm_match_any_sync_i32 :
46070b57cec5SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
460881ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i32">,
460981ad6265SDimitry Andric  ClangBuiltin<"__nvvm_match_any_sync_i32">;
46100b57cec5SDimitry Andric// match.any.sync.b64 mask, value
46110b57cec5SDimitry Andricdef int_nvvm_match_any_sync_i64 :
461281ad6265SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i64_ty],
461381ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i64">,
461481ad6265SDimitry Andric  ClangBuiltin<"__nvvm_match_any_sync_i64">;
46150b57cec5SDimitry Andric
46160b57cec5SDimitry Andric// match.all instruction have two variants -- one returns a single value, another
46170b57cec5SDimitry Andric// returns a pair {value, predicate}. We currently only implement the latter as
46180b57cec5SDimitry Andric// that's the variant exposed by CUDA API.
46190b57cec5SDimitry Andric
46200b57cec5SDimitry Andric// match.all.sync.b32p mask, value
46210b57cec5SDimitry Andricdef int_nvvm_match_all_sync_i32p :
46220b57cec5SDimitry Andric  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i32_ty],
462381ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i32p">;
46240b57cec5SDimitry Andric// match.all.sync.b64p mask, value
46250b57cec5SDimitry Andricdef int_nvvm_match_all_sync_i64p :
462681ad6265SDimitry Andric  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i64_ty],
462781ad6265SDimitry Andric            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i64p">;
46280b57cec5SDimitry Andric
46290b57cec5SDimitry Andric//
4630fe6060f1SDimitry Andric// REDUX.SYNC
4631fe6060f1SDimitry Andric//
4632fe6060f1SDimitry Andric// redux.sync.min.u32 dst, src, membermask;
463381ad6265SDimitry Andricdef int_nvvm_redux_sync_umin : ClangBuiltin<"__nvvm_redux_sync_umin">,
4634fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
463581ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4636fe6060f1SDimitry Andric
4637fe6060f1SDimitry Andric// redux.sync.max.u32 dst, src, membermask;
463881ad6265SDimitry Andricdef int_nvvm_redux_sync_umax : ClangBuiltin<"__nvvm_redux_sync_umax">,
4639fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
464081ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4641fe6060f1SDimitry Andric
4642fe6060f1SDimitry Andric// redux.sync.add.s32 dst, src, membermask;
464381ad6265SDimitry Andricdef int_nvvm_redux_sync_add : ClangBuiltin<"__nvvm_redux_sync_add">,
4644fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
464581ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4646fe6060f1SDimitry Andric
4647fe6060f1SDimitry Andric// redux.sync.min.s32 dst, src, membermask;
464881ad6265SDimitry Andricdef int_nvvm_redux_sync_min : ClangBuiltin<"__nvvm_redux_sync_min">,
4649fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
465081ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4651fe6060f1SDimitry Andric
4652fe6060f1SDimitry Andric// redux.sync.max.s32 dst, src, membermask;
465381ad6265SDimitry Andricdef int_nvvm_redux_sync_max : ClangBuiltin<"__nvvm_redux_sync_max">,
4654fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
465581ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4656fe6060f1SDimitry Andric
4657fe6060f1SDimitry Andric// redux.sync.and.b32 dst, src, membermask;
465881ad6265SDimitry Andricdef int_nvvm_redux_sync_and : ClangBuiltin<"__nvvm_redux_sync_and">,
4659fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
466081ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4661fe6060f1SDimitry Andric
4662fe6060f1SDimitry Andric// redux.sync.xor.b32 dst, src, membermask;
466381ad6265SDimitry Andricdef int_nvvm_redux_sync_xor : ClangBuiltin<"__nvvm_redux_sync_xor">,
4664fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
466581ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4666fe6060f1SDimitry Andric
4667fe6060f1SDimitry Andric// redux.sync.or.b32 dst, src, membermask;
466881ad6265SDimitry Andricdef int_nvvm_redux_sync_or : ClangBuiltin<"__nvvm_redux_sync_or">,
4669fe6060f1SDimitry Andric  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
467081ad6265SDimitry Andric            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4671fe6060f1SDimitry Andric
4672fe6060f1SDimitry Andric//
46730b57cec5SDimitry Andric// WMMA instructions
46740b57cec5SDimitry Andric//
46750b57cec5SDimitry Andric// WMMA.LOAD
46760b57cec5SDimitry Andricclass NVVM_WMMA_LD<WMMA_REGS Frag, string Layout, int WithStride>
46770b57cec5SDimitry Andric  : Intrinsic<Frag.regs,
46780b57cec5SDimitry Andric              !if(WithStride, [llvm_anyptr_ty, llvm_i32_ty], [llvm_anyptr_ty]),
467981ad6265SDimitry Andric              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
46800b57cec5SDimitry Andric              WMMA_NAME_LDST<"load", Frag, Layout, WithStride>.intr>;
46810b57cec5SDimitry Andric
46820b57cec5SDimitry Andric// WMMA.STORE.D
46830b57cec5SDimitry Andricclass NVVM_WMMA_ST<WMMA_REGS Frag, string Layout, int WithStride>
46840b57cec5SDimitry Andric  : Intrinsic<[],
46850b57cec5SDimitry Andric              !listconcat(
46860b57cec5SDimitry Andric                [llvm_anyptr_ty],
46870b57cec5SDimitry Andric                Frag.regs,
46880b57cec5SDimitry Andric                !if(WithStride, [llvm_i32_ty], [])),
468981ad6265SDimitry Andric              [IntrWriteMem, IntrArgMemOnly, IntrNoCallback, WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
46900b57cec5SDimitry Andric              WMMA_NAME_LDST<"store", Frag, Layout, WithStride>.intr>;
46910b57cec5SDimitry Andric
46920b57cec5SDimitry Andric// Create all load/store variants
46930b57cec5SDimitry Andricforeach layout = ["row", "col"] in {
46940b57cec5SDimitry Andric  foreach stride = [0, 1] in {
46950b57cec5SDimitry Andric    foreach frag = NVVM_MMA_OPS.all_ld_ops in
4696fe6060f1SDimitry Andric      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
46970b57cec5SDimitry Andric        def WMMA_NAME_LDST<"load", frag, layout, stride>.record
46980b57cec5SDimitry Andric             : NVVM_WMMA_LD<frag, layout, stride>;
46990b57cec5SDimitry Andric    foreach frag = NVVM_MMA_OPS.all_st_ops in
4700fe6060f1SDimitry Andric      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
47010b57cec5SDimitry Andric        def WMMA_NAME_LDST<"store", frag, layout, stride>.record
47020b57cec5SDimitry Andric             : NVVM_WMMA_ST<frag, layout, stride>;
47030b57cec5SDimitry Andric  }
47040b57cec5SDimitry Andric}
47050b57cec5SDimitry Andric
47060b57cec5SDimitry Andric// WMMA.MMA
4707fe6060f1SDimitry Andricclass NVVM_WMMA_MMA<string ALayout, string BLayout, int Satfinite, string rnd, string b1op,
47080b57cec5SDimitry Andric                    WMMA_REGS A, WMMA_REGS B,
47090b57cec5SDimitry Andric                    WMMA_REGS C, WMMA_REGS D>
47100b57cec5SDimitry Andric  : Intrinsic<D.regs,
47110b57cec5SDimitry Andric              !listconcat(A.regs, B.regs, C.regs),
471281ad6265SDimitry Andric              [IntrNoMem, IntrNoCallback],
4713fe6060f1SDimitry Andric              WMMA_NAME<ALayout, BLayout, Satfinite, rnd, b1op, A, B, C, D>.llvm>;
4714fe6060f1SDimitry Andric
4715fe6060f1SDimitry Andricforeach layout_a = ["row", "col"] in {
4716fe6060f1SDimitry Andric  foreach layout_b = ["row", "col"] in {
4717fe6060f1SDimitry Andric    foreach satf = [0, 1] in {
4718fe6060f1SDimitry Andric      foreach rnd = ["", "rn", "rz", "rm", "rp"] in {
4719fe6060f1SDimitry Andric        foreach op = NVVM_MMA_OPS.all_wmma_ops in {
4720fe6060f1SDimitry Andric          foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4721fe6060f1SDimitry Andric            if NVVM_WMMA_SUPPORTED<op, layout_a, layout_b, satf, rnd>.ret then {
4722fe6060f1SDimitry Andric              def WMMA_NAME<layout_a, layout_b, satf, rnd, b1op,
4723fe6060f1SDimitry Andric                                op[0], op[1], op[2], op[3]>.record
4724fe6060f1SDimitry Andric                : NVVM_WMMA_MMA<layout_a, layout_b, satf, rnd, b1op,
4725fe6060f1SDimitry Andric                                op[0], op[1], op[2], op[3]>;
4726fe6060f1SDimitry Andric            }
4727fe6060f1SDimitry Andric          } // b1op
4728fe6060f1SDimitry Andric        } // op
4729fe6060f1SDimitry Andric      } // rnd
4730fe6060f1SDimitry Andric    } // satf
4731fe6060f1SDimitry Andric  } // layout_b
4732fe6060f1SDimitry Andric} // layout_a
4733fe6060f1SDimitry Andric
4734fe6060f1SDimitry Andric// MMA
4735fe6060f1SDimitry Andricclass NVVM_MMA<string ALayout, string BLayout, int Satfinite, string b1op,
4736fe6060f1SDimitry Andric               WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D>
4737fe6060f1SDimitry Andric  : Intrinsic<D.regs,
4738fe6060f1SDimitry Andric              !listconcat(A.regs, B.regs, C.regs),
473981ad6265SDimitry Andric              [IntrNoMem, IntrNoCallback],
4740fe6060f1SDimitry Andric              MMA_NAME<ALayout, BLayout, Satfinite, b1op, A, B, C, D>.llvm>;
47410b57cec5SDimitry Andric
47420b57cec5SDimitry Andricforeach layout_a = ["row", "col"] in {
47430b57cec5SDimitry Andric  foreach layout_b = ["row", "col"] in {
47440b57cec5SDimitry Andric    foreach satf = [0, 1] in {
47450b57cec5SDimitry Andric      foreach op = NVVM_MMA_OPS.all_mma_ops in {
4746fe6060f1SDimitry Andric        foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4747e8d8bef9SDimitry Andric          if NVVM_MMA_SUPPORTED<op, layout_a, layout_b, satf>.ret then {
4748fe6060f1SDimitry Andric            def MMA_NAME<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>.record
4749fe6060f1SDimitry Andric              : NVVM_MMA<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>;
47500b57cec5SDimitry Andric          }
4751fe6060f1SDimitry Andric        } // b1op
4752fe6060f1SDimitry Andric      } // op
47530b57cec5SDimitry Andric    } // satf
47540b57cec5SDimitry Andric  } // layout_b
47550b57cec5SDimitry Andric} // layout_a
47560b57cec5SDimitry Andric
4757349cc55cSDimitry Andric// LDMATRIX
4758349cc55cSDimitry Andricclass NVVM_LDMATRIX<WMMA_REGS Frag, int Transposed>
4759349cc55cSDimitry Andric  : Intrinsic<Frag.regs, [llvm_anyptr_ty],
476081ad6265SDimitry Andric              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>,
4761349cc55cSDimitry Andric               NoCapture<ArgIndex<0>>],
4762349cc55cSDimitry Andric              LDMATRIX_NAME<Frag, Transposed>.intr>;
4763349cc55cSDimitry Andric
4764349cc55cSDimitry Andricforeach transposed = [0, 1] in {
4765349cc55cSDimitry Andric  foreach frag = NVVM_MMA_OPS.all_ldmatrix_ops in {
4766349cc55cSDimitry Andric    if NVVM_LDMATRIX_SUPPORTED<frag>.ret then {
4767349cc55cSDimitry Andric      def LDMATRIX_NAME<frag, transposed>.record
4768349cc55cSDimitry Andric        : NVVM_LDMATRIX<frag, transposed>;
4769349cc55cSDimitry Andric    }
4770349cc55cSDimitry Andric  }
4771349cc55cSDimitry Andric}
4772349cc55cSDimitry Andric
477306c3fb27SDimitry Andricdef int_nvvm_mapa
477406c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i32_ty],
477506c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
477606c3fb27SDimitry Andric              "llvm.nvvm.mapa">;
477706c3fb27SDimitry Andricdef int_nvvm_mapa_shared_cluster
477806c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_shared_ptr_ty], [llvm_shared_ptr_ty, llvm_i32_ty],
477906c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
478006c3fb27SDimitry Andric              "llvm.nvvm.mapa.shared.cluster">;
478106c3fb27SDimitry Andricdef int_nvvm_getctarank
478206c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty],
478306c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
478406c3fb27SDimitry Andric              "llvm.nvvm.getctarank">;
478506c3fb27SDimitry Andricdef int_nvvm_getctarank_shared_cluster
478606c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_shared_ptr_ty],
478706c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
478806c3fb27SDimitry Andric              "llvm.nvvm.getctarank.shared.cluster">;
478906c3fb27SDimitry Andricdef int_nvvm_is_explicit_cluster
479006c3fb27SDimitry Andric  : DefaultAttrsIntrinsic<[llvm_i1_ty], [],
479106c3fb27SDimitry Andric              [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
479206c3fb27SDimitry Andric              "llvm.nvvm.is_explicit_cluster">;
479306c3fb27SDimitry Andric
4794297eecfbSDimitry Andric// Setmaxnreg inc/dec intrinsics
4795297eecfbSDimitry Andricdef int_nvvm_setmaxnreg_inc_sync_aligned_u32
4796297eecfbSDimitry Andric  : DefaultAttrsIntrinsic<[], [llvm_i32_ty],
4797297eecfbSDimitry Andric              [IntrConvergent, IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>],
4798297eecfbSDimitry Andric              "llvm.nvvm.setmaxnreg.inc.sync.aligned.u32">;
4799297eecfbSDimitry Andricdef int_nvvm_setmaxnreg_dec_sync_aligned_u32
4800297eecfbSDimitry Andric  : DefaultAttrsIntrinsic<[], [llvm_i32_ty],
4801297eecfbSDimitry Andric              [IntrConvergent, IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>],
4802297eecfbSDimitry Andric              "llvm.nvvm.setmaxnreg.dec.sync.aligned.u32">;
4803297eecfbSDimitry Andric
48040b57cec5SDimitry Andric} // let TargetPrefix = "nvvm"
4805