xref: /aosp_15_r20/external/llvm/lib/Target/NVPTX/NVPTXISelLowering.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- NVPTXISelLowering.h - NVPTX DAG Lowering Interface ------*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file defines the interfaces that NVPTX uses to lower LLVM code into a
11*9880d681SAndroid Build Coastguard Worker // selection DAG.
12*9880d681SAndroid Build Coastguard Worker //
13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H
16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker #include "NVPTX.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/SelectionDAG.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetLowering.h"
21*9880d681SAndroid Build Coastguard Worker 
22*9880d681SAndroid Build Coastguard Worker namespace llvm {
23*9880d681SAndroid Build Coastguard Worker namespace NVPTXISD {
24*9880d681SAndroid Build Coastguard Worker enum NodeType : unsigned {
25*9880d681SAndroid Build Coastguard Worker   // Start the numbering from where ISD NodeType finishes.
26*9880d681SAndroid Build Coastguard Worker   FIRST_NUMBER = ISD::BUILTIN_OP_END,
27*9880d681SAndroid Build Coastguard Worker   Wrapper,
28*9880d681SAndroid Build Coastguard Worker   CALL,
29*9880d681SAndroid Build Coastguard Worker   RET_FLAG,
30*9880d681SAndroid Build Coastguard Worker   LOAD_PARAM,
31*9880d681SAndroid Build Coastguard Worker   DeclareParam,
32*9880d681SAndroid Build Coastguard Worker   DeclareScalarParam,
33*9880d681SAndroid Build Coastguard Worker   DeclareRetParam,
34*9880d681SAndroid Build Coastguard Worker   DeclareRet,
35*9880d681SAndroid Build Coastguard Worker   DeclareScalarRet,
36*9880d681SAndroid Build Coastguard Worker   PrintCall,
37*9880d681SAndroid Build Coastguard Worker   PrintConvergentCall,
38*9880d681SAndroid Build Coastguard Worker   PrintCallUni,
39*9880d681SAndroid Build Coastguard Worker   PrintConvergentCallUni,
40*9880d681SAndroid Build Coastguard Worker   CallArgBegin,
41*9880d681SAndroid Build Coastguard Worker   CallArg,
42*9880d681SAndroid Build Coastguard Worker   LastCallArg,
43*9880d681SAndroid Build Coastguard Worker   CallArgEnd,
44*9880d681SAndroid Build Coastguard Worker   CallVoid,
45*9880d681SAndroid Build Coastguard Worker   CallVal,
46*9880d681SAndroid Build Coastguard Worker   CallSymbol,
47*9880d681SAndroid Build Coastguard Worker   Prototype,
48*9880d681SAndroid Build Coastguard Worker   MoveParam,
49*9880d681SAndroid Build Coastguard Worker   PseudoUseParam,
50*9880d681SAndroid Build Coastguard Worker   RETURN,
51*9880d681SAndroid Build Coastguard Worker   CallSeqBegin,
52*9880d681SAndroid Build Coastguard Worker   CallSeqEnd,
53*9880d681SAndroid Build Coastguard Worker   CallPrototype,
54*9880d681SAndroid Build Coastguard Worker   FUN_SHFL_CLAMP,
55*9880d681SAndroid Build Coastguard Worker   FUN_SHFR_CLAMP,
56*9880d681SAndroid Build Coastguard Worker   MUL_WIDE_SIGNED,
57*9880d681SAndroid Build Coastguard Worker   MUL_WIDE_UNSIGNED,
58*9880d681SAndroid Build Coastguard Worker   IMAD,
59*9880d681SAndroid Build Coastguard Worker   Dummy,
60*9880d681SAndroid Build Coastguard Worker 
61*9880d681SAndroid Build Coastguard Worker   LoadV2 = ISD::FIRST_TARGET_MEMORY_OPCODE,
62*9880d681SAndroid Build Coastguard Worker   LoadV4,
63*9880d681SAndroid Build Coastguard Worker   LDGV2, // LDG.v2
64*9880d681SAndroid Build Coastguard Worker   LDGV4, // LDG.v4
65*9880d681SAndroid Build Coastguard Worker   LDUV2, // LDU.v2
66*9880d681SAndroid Build Coastguard Worker   LDUV4, // LDU.v4
67*9880d681SAndroid Build Coastguard Worker   StoreV2,
68*9880d681SAndroid Build Coastguard Worker   StoreV4,
69*9880d681SAndroid Build Coastguard Worker   LoadParam,
70*9880d681SAndroid Build Coastguard Worker   LoadParamV2,
71*9880d681SAndroid Build Coastguard Worker   LoadParamV4,
72*9880d681SAndroid Build Coastguard Worker   StoreParam,
73*9880d681SAndroid Build Coastguard Worker   StoreParamV2,
74*9880d681SAndroid Build Coastguard Worker   StoreParamV4,
75*9880d681SAndroid Build Coastguard Worker   StoreParamS32, // to sext and store a <32bit value, not used currently
76*9880d681SAndroid Build Coastguard Worker   StoreParamU32, // to zext and store a <32bit value, not used currently
77*9880d681SAndroid Build Coastguard Worker   StoreRetval,
78*9880d681SAndroid Build Coastguard Worker   StoreRetvalV2,
79*9880d681SAndroid Build Coastguard Worker   StoreRetvalV4,
80*9880d681SAndroid Build Coastguard Worker 
81*9880d681SAndroid Build Coastguard Worker   // Texture intrinsics
82*9880d681SAndroid Build Coastguard Worker   Tex1DFloatS32,
83*9880d681SAndroid Build Coastguard Worker   Tex1DFloatFloat,
84*9880d681SAndroid Build Coastguard Worker   Tex1DFloatFloatLevel,
85*9880d681SAndroid Build Coastguard Worker   Tex1DFloatFloatGrad,
86*9880d681SAndroid Build Coastguard Worker   Tex1DS32S32,
87*9880d681SAndroid Build Coastguard Worker   Tex1DS32Float,
88*9880d681SAndroid Build Coastguard Worker   Tex1DS32FloatLevel,
89*9880d681SAndroid Build Coastguard Worker   Tex1DS32FloatGrad,
90*9880d681SAndroid Build Coastguard Worker   Tex1DU32S32,
91*9880d681SAndroid Build Coastguard Worker   Tex1DU32Float,
92*9880d681SAndroid Build Coastguard Worker   Tex1DU32FloatLevel,
93*9880d681SAndroid Build Coastguard Worker   Tex1DU32FloatGrad,
94*9880d681SAndroid Build Coastguard Worker   Tex1DArrayFloatS32,
95*9880d681SAndroid Build Coastguard Worker   Tex1DArrayFloatFloat,
96*9880d681SAndroid Build Coastguard Worker   Tex1DArrayFloatFloatLevel,
97*9880d681SAndroid Build Coastguard Worker   Tex1DArrayFloatFloatGrad,
98*9880d681SAndroid Build Coastguard Worker   Tex1DArrayS32S32,
99*9880d681SAndroid Build Coastguard Worker   Tex1DArrayS32Float,
100*9880d681SAndroid Build Coastguard Worker   Tex1DArrayS32FloatLevel,
101*9880d681SAndroid Build Coastguard Worker   Tex1DArrayS32FloatGrad,
102*9880d681SAndroid Build Coastguard Worker   Tex1DArrayU32S32,
103*9880d681SAndroid Build Coastguard Worker   Tex1DArrayU32Float,
104*9880d681SAndroid Build Coastguard Worker   Tex1DArrayU32FloatLevel,
105*9880d681SAndroid Build Coastguard Worker   Tex1DArrayU32FloatGrad,
106*9880d681SAndroid Build Coastguard Worker   Tex2DFloatS32,
107*9880d681SAndroid Build Coastguard Worker   Tex2DFloatFloat,
108*9880d681SAndroid Build Coastguard Worker   Tex2DFloatFloatLevel,
109*9880d681SAndroid Build Coastguard Worker   Tex2DFloatFloatGrad,
110*9880d681SAndroid Build Coastguard Worker   Tex2DS32S32,
111*9880d681SAndroid Build Coastguard Worker   Tex2DS32Float,
112*9880d681SAndroid Build Coastguard Worker   Tex2DS32FloatLevel,
113*9880d681SAndroid Build Coastguard Worker   Tex2DS32FloatGrad,
114*9880d681SAndroid Build Coastguard Worker   Tex2DU32S32,
115*9880d681SAndroid Build Coastguard Worker   Tex2DU32Float,
116*9880d681SAndroid Build Coastguard Worker   Tex2DU32FloatLevel,
117*9880d681SAndroid Build Coastguard Worker   Tex2DU32FloatGrad,
118*9880d681SAndroid Build Coastguard Worker   Tex2DArrayFloatS32,
119*9880d681SAndroid Build Coastguard Worker   Tex2DArrayFloatFloat,
120*9880d681SAndroid Build Coastguard Worker   Tex2DArrayFloatFloatLevel,
121*9880d681SAndroid Build Coastguard Worker   Tex2DArrayFloatFloatGrad,
122*9880d681SAndroid Build Coastguard Worker   Tex2DArrayS32S32,
123*9880d681SAndroid Build Coastguard Worker   Tex2DArrayS32Float,
124*9880d681SAndroid Build Coastguard Worker   Tex2DArrayS32FloatLevel,
125*9880d681SAndroid Build Coastguard Worker   Tex2DArrayS32FloatGrad,
126*9880d681SAndroid Build Coastguard Worker   Tex2DArrayU32S32,
127*9880d681SAndroid Build Coastguard Worker   Tex2DArrayU32Float,
128*9880d681SAndroid Build Coastguard Worker   Tex2DArrayU32FloatLevel,
129*9880d681SAndroid Build Coastguard Worker   Tex2DArrayU32FloatGrad,
130*9880d681SAndroid Build Coastguard Worker   Tex3DFloatS32,
131*9880d681SAndroid Build Coastguard Worker   Tex3DFloatFloat,
132*9880d681SAndroid Build Coastguard Worker   Tex3DFloatFloatLevel,
133*9880d681SAndroid Build Coastguard Worker   Tex3DFloatFloatGrad,
134*9880d681SAndroid Build Coastguard Worker   Tex3DS32S32,
135*9880d681SAndroid Build Coastguard Worker   Tex3DS32Float,
136*9880d681SAndroid Build Coastguard Worker   Tex3DS32FloatLevel,
137*9880d681SAndroid Build Coastguard Worker   Tex3DS32FloatGrad,
138*9880d681SAndroid Build Coastguard Worker   Tex3DU32S32,
139*9880d681SAndroid Build Coastguard Worker   Tex3DU32Float,
140*9880d681SAndroid Build Coastguard Worker   Tex3DU32FloatLevel,
141*9880d681SAndroid Build Coastguard Worker   Tex3DU32FloatGrad,
142*9880d681SAndroid Build Coastguard Worker   TexCubeFloatFloat,
143*9880d681SAndroid Build Coastguard Worker   TexCubeFloatFloatLevel,
144*9880d681SAndroid Build Coastguard Worker   TexCubeS32Float,
145*9880d681SAndroid Build Coastguard Worker   TexCubeS32FloatLevel,
146*9880d681SAndroid Build Coastguard Worker   TexCubeU32Float,
147*9880d681SAndroid Build Coastguard Worker   TexCubeU32FloatLevel,
148*9880d681SAndroid Build Coastguard Worker   TexCubeArrayFloatFloat,
149*9880d681SAndroid Build Coastguard Worker   TexCubeArrayFloatFloatLevel,
150*9880d681SAndroid Build Coastguard Worker   TexCubeArrayS32Float,
151*9880d681SAndroid Build Coastguard Worker   TexCubeArrayS32FloatLevel,
152*9880d681SAndroid Build Coastguard Worker   TexCubeArrayU32Float,
153*9880d681SAndroid Build Coastguard Worker   TexCubeArrayU32FloatLevel,
154*9880d681SAndroid Build Coastguard Worker   Tld4R2DFloatFloat,
155*9880d681SAndroid Build Coastguard Worker   Tld4G2DFloatFloat,
156*9880d681SAndroid Build Coastguard Worker   Tld4B2DFloatFloat,
157*9880d681SAndroid Build Coastguard Worker   Tld4A2DFloatFloat,
158*9880d681SAndroid Build Coastguard Worker   Tld4R2DS64Float,
159*9880d681SAndroid Build Coastguard Worker   Tld4G2DS64Float,
160*9880d681SAndroid Build Coastguard Worker   Tld4B2DS64Float,
161*9880d681SAndroid Build Coastguard Worker   Tld4A2DS64Float,
162*9880d681SAndroid Build Coastguard Worker   Tld4R2DU64Float,
163*9880d681SAndroid Build Coastguard Worker   Tld4G2DU64Float,
164*9880d681SAndroid Build Coastguard Worker   Tld4B2DU64Float,
165*9880d681SAndroid Build Coastguard Worker   Tld4A2DU64Float,
166*9880d681SAndroid Build Coastguard Worker   TexUnified1DFloatS32,
167*9880d681SAndroid Build Coastguard Worker   TexUnified1DFloatFloat,
168*9880d681SAndroid Build Coastguard Worker   TexUnified1DFloatFloatLevel,
169*9880d681SAndroid Build Coastguard Worker   TexUnified1DFloatFloatGrad,
170*9880d681SAndroid Build Coastguard Worker   TexUnified1DS32S32,
171*9880d681SAndroid Build Coastguard Worker   TexUnified1DS32Float,
172*9880d681SAndroid Build Coastguard Worker   TexUnified1DS32FloatLevel,
173*9880d681SAndroid Build Coastguard Worker   TexUnified1DS32FloatGrad,
174*9880d681SAndroid Build Coastguard Worker   TexUnified1DU32S32,
175*9880d681SAndroid Build Coastguard Worker   TexUnified1DU32Float,
176*9880d681SAndroid Build Coastguard Worker   TexUnified1DU32FloatLevel,
177*9880d681SAndroid Build Coastguard Worker   TexUnified1DU32FloatGrad,
178*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayFloatS32,
179*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayFloatFloat,
180*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayFloatFloatLevel,
181*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayFloatFloatGrad,
182*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayS32S32,
183*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayS32Float,
184*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayS32FloatLevel,
185*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayS32FloatGrad,
186*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayU32S32,
187*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayU32Float,
188*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayU32FloatLevel,
189*9880d681SAndroid Build Coastguard Worker   TexUnified1DArrayU32FloatGrad,
190*9880d681SAndroid Build Coastguard Worker   TexUnified2DFloatS32,
191*9880d681SAndroid Build Coastguard Worker   TexUnified2DFloatFloat,
192*9880d681SAndroid Build Coastguard Worker   TexUnified2DFloatFloatLevel,
193*9880d681SAndroid Build Coastguard Worker   TexUnified2DFloatFloatGrad,
194*9880d681SAndroid Build Coastguard Worker   TexUnified2DS32S32,
195*9880d681SAndroid Build Coastguard Worker   TexUnified2DS32Float,
196*9880d681SAndroid Build Coastguard Worker   TexUnified2DS32FloatLevel,
197*9880d681SAndroid Build Coastguard Worker   TexUnified2DS32FloatGrad,
198*9880d681SAndroid Build Coastguard Worker   TexUnified2DU32S32,
199*9880d681SAndroid Build Coastguard Worker   TexUnified2DU32Float,
200*9880d681SAndroid Build Coastguard Worker   TexUnified2DU32FloatLevel,
201*9880d681SAndroid Build Coastguard Worker   TexUnified2DU32FloatGrad,
202*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayFloatS32,
203*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayFloatFloat,
204*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayFloatFloatLevel,
205*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayFloatFloatGrad,
206*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayS32S32,
207*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayS32Float,
208*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayS32FloatLevel,
209*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayS32FloatGrad,
210*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayU32S32,
211*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayU32Float,
212*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayU32FloatLevel,
213*9880d681SAndroid Build Coastguard Worker   TexUnified2DArrayU32FloatGrad,
214*9880d681SAndroid Build Coastguard Worker   TexUnified3DFloatS32,
215*9880d681SAndroid Build Coastguard Worker   TexUnified3DFloatFloat,
216*9880d681SAndroid Build Coastguard Worker   TexUnified3DFloatFloatLevel,
217*9880d681SAndroid Build Coastguard Worker   TexUnified3DFloatFloatGrad,
218*9880d681SAndroid Build Coastguard Worker   TexUnified3DS32S32,
219*9880d681SAndroid Build Coastguard Worker   TexUnified3DS32Float,
220*9880d681SAndroid Build Coastguard Worker   TexUnified3DS32FloatLevel,
221*9880d681SAndroid Build Coastguard Worker   TexUnified3DS32FloatGrad,
222*9880d681SAndroid Build Coastguard Worker   TexUnified3DU32S32,
223*9880d681SAndroid Build Coastguard Worker   TexUnified3DU32Float,
224*9880d681SAndroid Build Coastguard Worker   TexUnified3DU32FloatLevel,
225*9880d681SAndroid Build Coastguard Worker   TexUnified3DU32FloatGrad,
226*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeFloatFloat,
227*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeFloatFloatLevel,
228*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeS32Float,
229*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeS32FloatLevel,
230*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeU32Float,
231*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeU32FloatLevel,
232*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayFloatFloat,
233*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayFloatFloatLevel,
234*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayS32Float,
235*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayS32FloatLevel,
236*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayU32Float,
237*9880d681SAndroid Build Coastguard Worker   TexUnifiedCubeArrayU32FloatLevel,
238*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedR2DFloatFloat,
239*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedG2DFloatFloat,
240*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedB2DFloatFloat,
241*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedA2DFloatFloat,
242*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedR2DS64Float,
243*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedG2DS64Float,
244*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedB2DS64Float,
245*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedA2DS64Float,
246*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedR2DU64Float,
247*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedG2DU64Float,
248*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedB2DU64Float,
249*9880d681SAndroid Build Coastguard Worker   Tld4UnifiedA2DU64Float,
250*9880d681SAndroid Build Coastguard Worker 
251*9880d681SAndroid Build Coastguard Worker   // Surface intrinsics
252*9880d681SAndroid Build Coastguard Worker   Suld1DI8Clamp,
253*9880d681SAndroid Build Coastguard Worker   Suld1DI16Clamp,
254*9880d681SAndroid Build Coastguard Worker   Suld1DI32Clamp,
255*9880d681SAndroid Build Coastguard Worker   Suld1DI64Clamp,
256*9880d681SAndroid Build Coastguard Worker   Suld1DV2I8Clamp,
257*9880d681SAndroid Build Coastguard Worker   Suld1DV2I16Clamp,
258*9880d681SAndroid Build Coastguard Worker   Suld1DV2I32Clamp,
259*9880d681SAndroid Build Coastguard Worker   Suld1DV2I64Clamp,
260*9880d681SAndroid Build Coastguard Worker   Suld1DV4I8Clamp,
261*9880d681SAndroid Build Coastguard Worker   Suld1DV4I16Clamp,
262*9880d681SAndroid Build Coastguard Worker   Suld1DV4I32Clamp,
263*9880d681SAndroid Build Coastguard Worker 
264*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI8Clamp,
265*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI16Clamp,
266*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI32Clamp,
267*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI64Clamp,
268*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I8Clamp,
269*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I16Clamp,
270*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I32Clamp,
271*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I64Clamp,
272*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I8Clamp,
273*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I16Clamp,
274*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I32Clamp,
275*9880d681SAndroid Build Coastguard Worker 
276*9880d681SAndroid Build Coastguard Worker   Suld2DI8Clamp,
277*9880d681SAndroid Build Coastguard Worker   Suld2DI16Clamp,
278*9880d681SAndroid Build Coastguard Worker   Suld2DI32Clamp,
279*9880d681SAndroid Build Coastguard Worker   Suld2DI64Clamp,
280*9880d681SAndroid Build Coastguard Worker   Suld2DV2I8Clamp,
281*9880d681SAndroid Build Coastguard Worker   Suld2DV2I16Clamp,
282*9880d681SAndroid Build Coastguard Worker   Suld2DV2I32Clamp,
283*9880d681SAndroid Build Coastguard Worker   Suld2DV2I64Clamp,
284*9880d681SAndroid Build Coastguard Worker   Suld2DV4I8Clamp,
285*9880d681SAndroid Build Coastguard Worker   Suld2DV4I16Clamp,
286*9880d681SAndroid Build Coastguard Worker   Suld2DV4I32Clamp,
287*9880d681SAndroid Build Coastguard Worker 
288*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI8Clamp,
289*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI16Clamp,
290*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI32Clamp,
291*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI64Clamp,
292*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I8Clamp,
293*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I16Clamp,
294*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I32Clamp,
295*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I64Clamp,
296*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I8Clamp,
297*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I16Clamp,
298*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I32Clamp,
299*9880d681SAndroid Build Coastguard Worker 
300*9880d681SAndroid Build Coastguard Worker   Suld3DI8Clamp,
301*9880d681SAndroid Build Coastguard Worker   Suld3DI16Clamp,
302*9880d681SAndroid Build Coastguard Worker   Suld3DI32Clamp,
303*9880d681SAndroid Build Coastguard Worker   Suld3DI64Clamp,
304*9880d681SAndroid Build Coastguard Worker   Suld3DV2I8Clamp,
305*9880d681SAndroid Build Coastguard Worker   Suld3DV2I16Clamp,
306*9880d681SAndroid Build Coastguard Worker   Suld3DV2I32Clamp,
307*9880d681SAndroid Build Coastguard Worker   Suld3DV2I64Clamp,
308*9880d681SAndroid Build Coastguard Worker   Suld3DV4I8Clamp,
309*9880d681SAndroid Build Coastguard Worker   Suld3DV4I16Clamp,
310*9880d681SAndroid Build Coastguard Worker   Suld3DV4I32Clamp,
311*9880d681SAndroid Build Coastguard Worker 
312*9880d681SAndroid Build Coastguard Worker   Suld1DI8Trap,
313*9880d681SAndroid Build Coastguard Worker   Suld1DI16Trap,
314*9880d681SAndroid Build Coastguard Worker   Suld1DI32Trap,
315*9880d681SAndroid Build Coastguard Worker   Suld1DI64Trap,
316*9880d681SAndroid Build Coastguard Worker   Suld1DV2I8Trap,
317*9880d681SAndroid Build Coastguard Worker   Suld1DV2I16Trap,
318*9880d681SAndroid Build Coastguard Worker   Suld1DV2I32Trap,
319*9880d681SAndroid Build Coastguard Worker   Suld1DV2I64Trap,
320*9880d681SAndroid Build Coastguard Worker   Suld1DV4I8Trap,
321*9880d681SAndroid Build Coastguard Worker   Suld1DV4I16Trap,
322*9880d681SAndroid Build Coastguard Worker   Suld1DV4I32Trap,
323*9880d681SAndroid Build Coastguard Worker 
324*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI8Trap,
325*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI16Trap,
326*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI32Trap,
327*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI64Trap,
328*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I8Trap,
329*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I16Trap,
330*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I32Trap,
331*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I64Trap,
332*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I8Trap,
333*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I16Trap,
334*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I32Trap,
335*9880d681SAndroid Build Coastguard Worker 
336*9880d681SAndroid Build Coastguard Worker   Suld2DI8Trap,
337*9880d681SAndroid Build Coastguard Worker   Suld2DI16Trap,
338*9880d681SAndroid Build Coastguard Worker   Suld2DI32Trap,
339*9880d681SAndroid Build Coastguard Worker   Suld2DI64Trap,
340*9880d681SAndroid Build Coastguard Worker   Suld2DV2I8Trap,
341*9880d681SAndroid Build Coastguard Worker   Suld2DV2I16Trap,
342*9880d681SAndroid Build Coastguard Worker   Suld2DV2I32Trap,
343*9880d681SAndroid Build Coastguard Worker   Suld2DV2I64Trap,
344*9880d681SAndroid Build Coastguard Worker   Suld2DV4I8Trap,
345*9880d681SAndroid Build Coastguard Worker   Suld2DV4I16Trap,
346*9880d681SAndroid Build Coastguard Worker   Suld2DV4I32Trap,
347*9880d681SAndroid Build Coastguard Worker 
348*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI8Trap,
349*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI16Trap,
350*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI32Trap,
351*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI64Trap,
352*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I8Trap,
353*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I16Trap,
354*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I32Trap,
355*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I64Trap,
356*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I8Trap,
357*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I16Trap,
358*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I32Trap,
359*9880d681SAndroid Build Coastguard Worker 
360*9880d681SAndroid Build Coastguard Worker   Suld3DI8Trap,
361*9880d681SAndroid Build Coastguard Worker   Suld3DI16Trap,
362*9880d681SAndroid Build Coastguard Worker   Suld3DI32Trap,
363*9880d681SAndroid Build Coastguard Worker   Suld3DI64Trap,
364*9880d681SAndroid Build Coastguard Worker   Suld3DV2I8Trap,
365*9880d681SAndroid Build Coastguard Worker   Suld3DV2I16Trap,
366*9880d681SAndroid Build Coastguard Worker   Suld3DV2I32Trap,
367*9880d681SAndroid Build Coastguard Worker   Suld3DV2I64Trap,
368*9880d681SAndroid Build Coastguard Worker   Suld3DV4I8Trap,
369*9880d681SAndroid Build Coastguard Worker   Suld3DV4I16Trap,
370*9880d681SAndroid Build Coastguard Worker   Suld3DV4I32Trap,
371*9880d681SAndroid Build Coastguard Worker 
372*9880d681SAndroid Build Coastguard Worker   Suld1DI8Zero,
373*9880d681SAndroid Build Coastguard Worker   Suld1DI16Zero,
374*9880d681SAndroid Build Coastguard Worker   Suld1DI32Zero,
375*9880d681SAndroid Build Coastguard Worker   Suld1DI64Zero,
376*9880d681SAndroid Build Coastguard Worker   Suld1DV2I8Zero,
377*9880d681SAndroid Build Coastguard Worker   Suld1DV2I16Zero,
378*9880d681SAndroid Build Coastguard Worker   Suld1DV2I32Zero,
379*9880d681SAndroid Build Coastguard Worker   Suld1DV2I64Zero,
380*9880d681SAndroid Build Coastguard Worker   Suld1DV4I8Zero,
381*9880d681SAndroid Build Coastguard Worker   Suld1DV4I16Zero,
382*9880d681SAndroid Build Coastguard Worker   Suld1DV4I32Zero,
383*9880d681SAndroid Build Coastguard Worker 
384*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI8Zero,
385*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI16Zero,
386*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI32Zero,
387*9880d681SAndroid Build Coastguard Worker   Suld1DArrayI64Zero,
388*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I8Zero,
389*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I16Zero,
390*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I32Zero,
391*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV2I64Zero,
392*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I8Zero,
393*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I16Zero,
394*9880d681SAndroid Build Coastguard Worker   Suld1DArrayV4I32Zero,
395*9880d681SAndroid Build Coastguard Worker 
396*9880d681SAndroid Build Coastguard Worker   Suld2DI8Zero,
397*9880d681SAndroid Build Coastguard Worker   Suld2DI16Zero,
398*9880d681SAndroid Build Coastguard Worker   Suld2DI32Zero,
399*9880d681SAndroid Build Coastguard Worker   Suld2DI64Zero,
400*9880d681SAndroid Build Coastguard Worker   Suld2DV2I8Zero,
401*9880d681SAndroid Build Coastguard Worker   Suld2DV2I16Zero,
402*9880d681SAndroid Build Coastguard Worker   Suld2DV2I32Zero,
403*9880d681SAndroid Build Coastguard Worker   Suld2DV2I64Zero,
404*9880d681SAndroid Build Coastguard Worker   Suld2DV4I8Zero,
405*9880d681SAndroid Build Coastguard Worker   Suld2DV4I16Zero,
406*9880d681SAndroid Build Coastguard Worker   Suld2DV4I32Zero,
407*9880d681SAndroid Build Coastguard Worker 
408*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI8Zero,
409*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI16Zero,
410*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI32Zero,
411*9880d681SAndroid Build Coastguard Worker   Suld2DArrayI64Zero,
412*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I8Zero,
413*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I16Zero,
414*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I32Zero,
415*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV2I64Zero,
416*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I8Zero,
417*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I16Zero,
418*9880d681SAndroid Build Coastguard Worker   Suld2DArrayV4I32Zero,
419*9880d681SAndroid Build Coastguard Worker 
420*9880d681SAndroid Build Coastguard Worker   Suld3DI8Zero,
421*9880d681SAndroid Build Coastguard Worker   Suld3DI16Zero,
422*9880d681SAndroid Build Coastguard Worker   Suld3DI32Zero,
423*9880d681SAndroid Build Coastguard Worker   Suld3DI64Zero,
424*9880d681SAndroid Build Coastguard Worker   Suld3DV2I8Zero,
425*9880d681SAndroid Build Coastguard Worker   Suld3DV2I16Zero,
426*9880d681SAndroid Build Coastguard Worker   Suld3DV2I32Zero,
427*9880d681SAndroid Build Coastguard Worker   Suld3DV2I64Zero,
428*9880d681SAndroid Build Coastguard Worker   Suld3DV4I8Zero,
429*9880d681SAndroid Build Coastguard Worker   Suld3DV4I16Zero,
430*9880d681SAndroid Build Coastguard Worker   Suld3DV4I32Zero
431*9880d681SAndroid Build Coastguard Worker };
432*9880d681SAndroid Build Coastguard Worker }
433*9880d681SAndroid Build Coastguard Worker 
434*9880d681SAndroid Build Coastguard Worker class NVPTXSubtarget;
435*9880d681SAndroid Build Coastguard Worker 
436*9880d681SAndroid Build Coastguard Worker //===--------------------------------------------------------------------===//
437*9880d681SAndroid Build Coastguard Worker // TargetLowering Implementation
438*9880d681SAndroid Build Coastguard Worker //===--------------------------------------------------------------------===//
439*9880d681SAndroid Build Coastguard Worker class NVPTXTargetLowering : public TargetLowering {
440*9880d681SAndroid Build Coastguard Worker public:
441*9880d681SAndroid Build Coastguard Worker   explicit NVPTXTargetLowering(const NVPTXTargetMachine &TM,
442*9880d681SAndroid Build Coastguard Worker                                const NVPTXSubtarget &STI);
443*9880d681SAndroid Build Coastguard Worker   SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
444*9880d681SAndroid Build Coastguard Worker 
445*9880d681SAndroid Build Coastguard Worker   SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
446*9880d681SAndroid Build Coastguard Worker 
447*9880d681SAndroid Build Coastguard Worker   const char *getTargetNodeName(unsigned Opcode) const override;
448*9880d681SAndroid Build Coastguard Worker 
449*9880d681SAndroid Build Coastguard Worker   bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
450*9880d681SAndroid Build Coastguard Worker                           unsigned Intrinsic) const override;
451*9880d681SAndroid Build Coastguard Worker 
452*9880d681SAndroid Build Coastguard Worker   /// isLegalAddressingMode - Return true if the addressing mode represented
453*9880d681SAndroid Build Coastguard Worker   /// by AM is legal for this target, for a load/store of the specified type
454*9880d681SAndroid Build Coastguard Worker   /// Used to guide target specific optimizations, like loop strength
455*9880d681SAndroid Build Coastguard Worker   /// reduction (LoopStrengthReduce.cpp) and memory optimization for
456*9880d681SAndroid Build Coastguard Worker   /// address mode (CodeGenPrepare.cpp)
457*9880d681SAndroid Build Coastguard Worker   bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty,
458*9880d681SAndroid Build Coastguard Worker                              unsigned AS) const override;
459*9880d681SAndroid Build Coastguard Worker 
isTruncateFree(Type * SrcTy,Type * DstTy)460*9880d681SAndroid Build Coastguard Worker   bool isTruncateFree(Type *SrcTy, Type *DstTy) const override {
461*9880d681SAndroid Build Coastguard Worker     // Truncating 64-bit to 32-bit is free in SASS.
462*9880d681SAndroid Build Coastguard Worker     if (!SrcTy->isIntegerTy() || !DstTy->isIntegerTy())
463*9880d681SAndroid Build Coastguard Worker       return false;
464*9880d681SAndroid Build Coastguard Worker     return SrcTy->getPrimitiveSizeInBits() == 64 &&
465*9880d681SAndroid Build Coastguard Worker            DstTy->getPrimitiveSizeInBits() == 32;
466*9880d681SAndroid Build Coastguard Worker   }
467*9880d681SAndroid Build Coastguard Worker 
getSetCCResultType(const DataLayout & DL,LLVMContext & Ctx,EVT VT)468*9880d681SAndroid Build Coastguard Worker   EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Ctx,
469*9880d681SAndroid Build Coastguard Worker                          EVT VT) const override {
470*9880d681SAndroid Build Coastguard Worker     if (VT.isVector())
471*9880d681SAndroid Build Coastguard Worker       return EVT::getVectorVT(Ctx, MVT::i1, VT.getVectorNumElements());
472*9880d681SAndroid Build Coastguard Worker     return MVT::i1;
473*9880d681SAndroid Build Coastguard Worker   }
474*9880d681SAndroid Build Coastguard Worker 
475*9880d681SAndroid Build Coastguard Worker   ConstraintType getConstraintType(StringRef Constraint) const override;
476*9880d681SAndroid Build Coastguard Worker   std::pair<unsigned, const TargetRegisterClass *>
477*9880d681SAndroid Build Coastguard Worker   getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
478*9880d681SAndroid Build Coastguard Worker                                StringRef Constraint, MVT VT) const override;
479*9880d681SAndroid Build Coastguard Worker 
480*9880d681SAndroid Build Coastguard Worker   SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
481*9880d681SAndroid Build Coastguard Worker                                bool isVarArg,
482*9880d681SAndroid Build Coastguard Worker                                const SmallVectorImpl<ISD::InputArg> &Ins,
483*9880d681SAndroid Build Coastguard Worker                                const SDLoc &dl, SelectionDAG &DAG,
484*9880d681SAndroid Build Coastguard Worker                                SmallVectorImpl<SDValue> &InVals) const override;
485*9880d681SAndroid Build Coastguard Worker 
486*9880d681SAndroid Build Coastguard Worker   SDValue LowerCall(CallLoweringInfo &CLI,
487*9880d681SAndroid Build Coastguard Worker                     SmallVectorImpl<SDValue> &InVals) const override;
488*9880d681SAndroid Build Coastguard Worker 
489*9880d681SAndroid Build Coastguard Worker   std::string getPrototype(const DataLayout &DL, Type *, const ArgListTy &,
490*9880d681SAndroid Build Coastguard Worker                            const SmallVectorImpl<ISD::OutputArg> &,
491*9880d681SAndroid Build Coastguard Worker                            unsigned retAlignment,
492*9880d681SAndroid Build Coastguard Worker                            const ImmutableCallSite *CS) const;
493*9880d681SAndroid Build Coastguard Worker 
494*9880d681SAndroid Build Coastguard Worker   SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
495*9880d681SAndroid Build Coastguard Worker                       const SmallVectorImpl<ISD::OutputArg> &Outs,
496*9880d681SAndroid Build Coastguard Worker                       const SmallVectorImpl<SDValue> &OutVals, const SDLoc &dl,
497*9880d681SAndroid Build Coastguard Worker                       SelectionDAG &DAG) const override;
498*9880d681SAndroid Build Coastguard Worker 
499*9880d681SAndroid Build Coastguard Worker   void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint,
500*9880d681SAndroid Build Coastguard Worker                                     std::vector<SDValue> &Ops,
501*9880d681SAndroid Build Coastguard Worker                                     SelectionDAG &DAG) const override;
502*9880d681SAndroid Build Coastguard Worker 
503*9880d681SAndroid Build Coastguard Worker   const NVPTXTargetMachine *nvTM;
504*9880d681SAndroid Build Coastguard Worker 
505*9880d681SAndroid Build Coastguard Worker   // PTX always uses 32-bit shift amounts
getScalarShiftAmountTy(const DataLayout &,EVT)506*9880d681SAndroid Build Coastguard Worker   MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override {
507*9880d681SAndroid Build Coastguard Worker     return MVT::i32;
508*9880d681SAndroid Build Coastguard Worker   }
509*9880d681SAndroid Build Coastguard Worker 
510*9880d681SAndroid Build Coastguard Worker   TargetLoweringBase::LegalizeTypeAction
511*9880d681SAndroid Build Coastguard Worker   getPreferredVectorAction(EVT VT) const override;
512*9880d681SAndroid Build Coastguard Worker 
513*9880d681SAndroid Build Coastguard Worker   bool allowFMA(MachineFunction &MF, CodeGenOpt::Level OptLevel) const;
514*9880d681SAndroid Build Coastguard Worker 
isFMAFasterThanFMulAndFAdd(EVT)515*9880d681SAndroid Build Coastguard Worker   bool isFMAFasterThanFMulAndFAdd(EVT) const override { return true; }
516*9880d681SAndroid Build Coastguard Worker 
enableAggressiveFMAFusion(EVT VT)517*9880d681SAndroid Build Coastguard Worker   bool enableAggressiveFMAFusion(EVT VT) const override { return true; }
518*9880d681SAndroid Build Coastguard Worker 
519*9880d681SAndroid Build Coastguard Worker private:
520*9880d681SAndroid Build Coastguard Worker   const NVPTXSubtarget &STI; // cache the subtarget here
521*9880d681SAndroid Build Coastguard Worker   SDValue getParamSymbol(SelectionDAG &DAG, int idx, EVT) const;
522*9880d681SAndroid Build Coastguard Worker 
523*9880d681SAndroid Build Coastguard Worker   SDValue LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const;
524*9880d681SAndroid Build Coastguard Worker 
525*9880d681SAndroid Build Coastguard Worker   SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) const;
526*9880d681SAndroid Build Coastguard Worker   SDValue LowerLOADi1(SDValue Op, SelectionDAG &DAG) const;
527*9880d681SAndroid Build Coastguard Worker 
528*9880d681SAndroid Build Coastguard Worker   SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) const;
529*9880d681SAndroid Build Coastguard Worker   SDValue LowerSTOREi1(SDValue Op, SelectionDAG &DAG) const;
530*9880d681SAndroid Build Coastguard Worker   SDValue LowerSTOREVector(SDValue Op, SelectionDAG &DAG) const;
531*9880d681SAndroid Build Coastguard Worker 
532*9880d681SAndroid Build Coastguard Worker   SDValue LowerShiftRightParts(SDValue Op, SelectionDAG &DAG) const;
533*9880d681SAndroid Build Coastguard Worker   SDValue LowerShiftLeftParts(SDValue Op, SelectionDAG &DAG) const;
534*9880d681SAndroid Build Coastguard Worker 
535*9880d681SAndroid Build Coastguard Worker   SDValue LowerSelect(SDValue Op, SelectionDAG &DAG) const;
536*9880d681SAndroid Build Coastguard Worker 
537*9880d681SAndroid Build Coastguard Worker   void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue> &Results,
538*9880d681SAndroid Build Coastguard Worker                           SelectionDAG &DAG) const override;
539*9880d681SAndroid Build Coastguard Worker   SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
540*9880d681SAndroid Build Coastguard Worker 
541*9880d681SAndroid Build Coastguard Worker   unsigned getArgumentAlignment(SDValue Callee, const ImmutableCallSite *CS,
542*9880d681SAndroid Build Coastguard Worker                                 Type *Ty, unsigned Idx) const;
543*9880d681SAndroid Build Coastguard Worker };
544*9880d681SAndroid Build Coastguard Worker } // namespace llvm
545*9880d681SAndroid Build Coastguard Worker 
546*9880d681SAndroid Build Coastguard Worker #endif
547