xref: /aosp_15_r20/external/llvm/lib/Target/NVPTX/NVPTX.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- NVPTX.h - Top-level interface for NVPTX representation --*- 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 contains the entry points for global functions defined in
11*9880d681SAndroid Build Coastguard Worker // the LLVM NVPTX back-end.
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_NVPTX_H
16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_NVPTX_NVPTX_H
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker #include "MCTargetDesc/NVPTXBaseInfo.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringMap.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Module.h"
21*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Value.h"
22*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ErrorHandling.h"
23*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetMachine.h"
24*9880d681SAndroid Build Coastguard Worker #include <cassert>
25*9880d681SAndroid Build Coastguard Worker #include <iosfwd>
26*9880d681SAndroid Build Coastguard Worker 
27*9880d681SAndroid Build Coastguard Worker namespace llvm {
28*9880d681SAndroid Build Coastguard Worker class NVPTXTargetMachine;
29*9880d681SAndroid Build Coastguard Worker class FunctionPass;
30*9880d681SAndroid Build Coastguard Worker class MachineFunctionPass;
31*9880d681SAndroid Build Coastguard Worker class formatted_raw_ostream;
32*9880d681SAndroid Build Coastguard Worker 
33*9880d681SAndroid Build Coastguard Worker namespace NVPTXCC {
34*9880d681SAndroid Build Coastguard Worker enum CondCodes {
35*9880d681SAndroid Build Coastguard Worker   EQ,
36*9880d681SAndroid Build Coastguard Worker   NE,
37*9880d681SAndroid Build Coastguard Worker   LT,
38*9880d681SAndroid Build Coastguard Worker   LE,
39*9880d681SAndroid Build Coastguard Worker   GT,
40*9880d681SAndroid Build Coastguard Worker   GE
41*9880d681SAndroid Build Coastguard Worker };
42*9880d681SAndroid Build Coastguard Worker }
43*9880d681SAndroid Build Coastguard Worker 
44*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
45*9880d681SAndroid Build Coastguard Worker                                  llvm::CodeGenOpt::Level OptLevel);
46*9880d681SAndroid Build Coastguard Worker ModulePass *createNVPTXAssignValidGlobalNamesPass();
47*9880d681SAndroid Build Coastguard Worker ModulePass *createGenericToNVVMPass();
48*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVPTXFavorNonGenericAddrSpacesPass();
49*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVPTXInferAddressSpacesPass();
50*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVVMIntrRangePass(unsigned int SmVersion);
51*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVVMReflectPass();
52*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVVMReflectPass(const StringMap<int> &Mapping);
53*9880d681SAndroid Build Coastguard Worker MachineFunctionPass *createNVPTXPrologEpilogPass();
54*9880d681SAndroid Build Coastguard Worker MachineFunctionPass *createNVPTXReplaceImageHandlesPass();
55*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVPTXImageOptimizerPass();
56*9880d681SAndroid Build Coastguard Worker FunctionPass *createNVPTXLowerKernelArgsPass(const NVPTXTargetMachine *TM);
57*9880d681SAndroid Build Coastguard Worker BasicBlockPass *createNVPTXLowerAllocaPass();
58*9880d681SAndroid Build Coastguard Worker MachineFunctionPass *createNVPTXPeephole();
59*9880d681SAndroid Build Coastguard Worker 
60*9880d681SAndroid Build Coastguard Worker extern Target TheNVPTXTarget32;
61*9880d681SAndroid Build Coastguard Worker extern Target TheNVPTXTarget64;
62*9880d681SAndroid Build Coastguard Worker 
63*9880d681SAndroid Build Coastguard Worker namespace NVPTX {
64*9880d681SAndroid Build Coastguard Worker enum DrvInterface {
65*9880d681SAndroid Build Coastguard Worker   NVCL,
66*9880d681SAndroid Build Coastguard Worker   CUDA
67*9880d681SAndroid Build Coastguard Worker };
68*9880d681SAndroid Build Coastguard Worker 
69*9880d681SAndroid Build Coastguard Worker // A field inside TSFlags needs a shift and a mask. The usage is
70*9880d681SAndroid Build Coastguard Worker // always as follows :
71*9880d681SAndroid Build Coastguard Worker // ((TSFlags & fieldMask) >> fieldShift)
72*9880d681SAndroid Build Coastguard Worker // The enum keeps the mask, the shift, and all valid values of the
73*9880d681SAndroid Build Coastguard Worker // field in one place.
74*9880d681SAndroid Build Coastguard Worker enum VecInstType {
75*9880d681SAndroid Build Coastguard Worker   VecInstTypeShift = 0,
76*9880d681SAndroid Build Coastguard Worker   VecInstTypeMask = 0xF,
77*9880d681SAndroid Build Coastguard Worker 
78*9880d681SAndroid Build Coastguard Worker   VecNOP = 0,
79*9880d681SAndroid Build Coastguard Worker   VecLoad = 1,
80*9880d681SAndroid Build Coastguard Worker   VecStore = 2,
81*9880d681SAndroid Build Coastguard Worker   VecBuild = 3,
82*9880d681SAndroid Build Coastguard Worker   VecShuffle = 4,
83*9880d681SAndroid Build Coastguard Worker   VecExtract = 5,
84*9880d681SAndroid Build Coastguard Worker   VecInsert = 6,
85*9880d681SAndroid Build Coastguard Worker   VecDest = 7,
86*9880d681SAndroid Build Coastguard Worker   VecOther = 15
87*9880d681SAndroid Build Coastguard Worker };
88*9880d681SAndroid Build Coastguard Worker 
89*9880d681SAndroid Build Coastguard Worker enum SimpleMove {
90*9880d681SAndroid Build Coastguard Worker   SimpleMoveMask = 0x10,
91*9880d681SAndroid Build Coastguard Worker   SimpleMoveShift = 4
92*9880d681SAndroid Build Coastguard Worker };
93*9880d681SAndroid Build Coastguard Worker enum LoadStore {
94*9880d681SAndroid Build Coastguard Worker   isLoadMask = 0x20,
95*9880d681SAndroid Build Coastguard Worker   isLoadShift = 5,
96*9880d681SAndroid Build Coastguard Worker   isStoreMask = 0x40,
97*9880d681SAndroid Build Coastguard Worker   isStoreShift = 6
98*9880d681SAndroid Build Coastguard Worker };
99*9880d681SAndroid Build Coastguard Worker 
100*9880d681SAndroid Build Coastguard Worker namespace PTXLdStInstCode {
101*9880d681SAndroid Build Coastguard Worker enum AddressSpace {
102*9880d681SAndroid Build Coastguard Worker   GENERIC = 0,
103*9880d681SAndroid Build Coastguard Worker   GLOBAL = 1,
104*9880d681SAndroid Build Coastguard Worker   CONSTANT = 2,
105*9880d681SAndroid Build Coastguard Worker   SHARED = 3,
106*9880d681SAndroid Build Coastguard Worker   PARAM = 4,
107*9880d681SAndroid Build Coastguard Worker   LOCAL = 5
108*9880d681SAndroid Build Coastguard Worker };
109*9880d681SAndroid Build Coastguard Worker enum FromType {
110*9880d681SAndroid Build Coastguard Worker   Unsigned = 0,
111*9880d681SAndroid Build Coastguard Worker   Signed,
112*9880d681SAndroid Build Coastguard Worker   Float
113*9880d681SAndroid Build Coastguard Worker };
114*9880d681SAndroid Build Coastguard Worker enum VecType {
115*9880d681SAndroid Build Coastguard Worker   Scalar = 1,
116*9880d681SAndroid Build Coastguard Worker   V2 = 2,
117*9880d681SAndroid Build Coastguard Worker   V4 = 4
118*9880d681SAndroid Build Coastguard Worker };
119*9880d681SAndroid Build Coastguard Worker }
120*9880d681SAndroid Build Coastguard Worker 
121*9880d681SAndroid Build Coastguard Worker /// PTXCvtMode - Conversion code enumeration
122*9880d681SAndroid Build Coastguard Worker namespace PTXCvtMode {
123*9880d681SAndroid Build Coastguard Worker enum CvtMode {
124*9880d681SAndroid Build Coastguard Worker   NONE = 0,
125*9880d681SAndroid Build Coastguard Worker   RNI,
126*9880d681SAndroid Build Coastguard Worker   RZI,
127*9880d681SAndroid Build Coastguard Worker   RMI,
128*9880d681SAndroid Build Coastguard Worker   RPI,
129*9880d681SAndroid Build Coastguard Worker   RN,
130*9880d681SAndroid Build Coastguard Worker   RZ,
131*9880d681SAndroid Build Coastguard Worker   RM,
132*9880d681SAndroid Build Coastguard Worker   RP,
133*9880d681SAndroid Build Coastguard Worker 
134*9880d681SAndroid Build Coastguard Worker   BASE_MASK = 0x0F,
135*9880d681SAndroid Build Coastguard Worker   FTZ_FLAG = 0x10,
136*9880d681SAndroid Build Coastguard Worker   SAT_FLAG = 0x20
137*9880d681SAndroid Build Coastguard Worker };
138*9880d681SAndroid Build Coastguard Worker }
139*9880d681SAndroid Build Coastguard Worker 
140*9880d681SAndroid Build Coastguard Worker /// PTXCmpMode - Comparison mode enumeration
141*9880d681SAndroid Build Coastguard Worker namespace PTXCmpMode {
142*9880d681SAndroid Build Coastguard Worker enum CmpMode {
143*9880d681SAndroid Build Coastguard Worker   EQ = 0,
144*9880d681SAndroid Build Coastguard Worker   NE,
145*9880d681SAndroid Build Coastguard Worker   LT,
146*9880d681SAndroid Build Coastguard Worker   LE,
147*9880d681SAndroid Build Coastguard Worker   GT,
148*9880d681SAndroid Build Coastguard Worker   GE,
149*9880d681SAndroid Build Coastguard Worker   LO,
150*9880d681SAndroid Build Coastguard Worker   LS,
151*9880d681SAndroid Build Coastguard Worker   HI,
152*9880d681SAndroid Build Coastguard Worker   HS,
153*9880d681SAndroid Build Coastguard Worker   EQU,
154*9880d681SAndroid Build Coastguard Worker   NEU,
155*9880d681SAndroid Build Coastguard Worker   LTU,
156*9880d681SAndroid Build Coastguard Worker   LEU,
157*9880d681SAndroid Build Coastguard Worker   GTU,
158*9880d681SAndroid Build Coastguard Worker   GEU,
159*9880d681SAndroid Build Coastguard Worker   NUM,
160*9880d681SAndroid Build Coastguard Worker   // NAN is a MACRO
161*9880d681SAndroid Build Coastguard Worker   NotANumber,
162*9880d681SAndroid Build Coastguard Worker 
163*9880d681SAndroid Build Coastguard Worker   BASE_MASK = 0xFF,
164*9880d681SAndroid Build Coastguard Worker   FTZ_FLAG = 0x100
165*9880d681SAndroid Build Coastguard Worker };
166*9880d681SAndroid Build Coastguard Worker }
167*9880d681SAndroid Build Coastguard Worker }
168*9880d681SAndroid Build Coastguard Worker } // end namespace llvm;
169*9880d681SAndroid Build Coastguard Worker 
170*9880d681SAndroid Build Coastguard Worker // Defines symbolic names for NVPTX registers.  This defines a mapping from
171*9880d681SAndroid Build Coastguard Worker // register name to register number.
172*9880d681SAndroid Build Coastguard Worker #define GET_REGINFO_ENUM
173*9880d681SAndroid Build Coastguard Worker #include "NVPTXGenRegisterInfo.inc"
174*9880d681SAndroid Build Coastguard Worker 
175*9880d681SAndroid Build Coastguard Worker // Defines symbolic names for the NVPTX instructions.
176*9880d681SAndroid Build Coastguard Worker #define GET_INSTRINFO_ENUM
177*9880d681SAndroid Build Coastguard Worker #include "NVPTXGenInstrInfo.inc"
178*9880d681SAndroid Build Coastguard Worker 
179*9880d681SAndroid Build Coastguard Worker #endif
180