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