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