NVPTX.h revision 0ff4287fe2245f417ed78fa535fce360b8b8df23
1//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains the entry points for global functions defined in 11// the LLVM NVPTX back-end. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_TARGET_NVPTX_H 16#define LLVM_TARGET_NVPTX_H 17 18#include "MCTargetDesc/NVPTXBaseInfo.h" 19#include "llvm/ADT/StringMap.h" 20#include "llvm/IR/Module.h" 21#include "llvm/IR/Value.h" 22#include "llvm/Support/ErrorHandling.h" 23#include "llvm/Target/TargetMachine.h" 24#include <cassert> 25#include <iosfwd> 26 27namespace llvm { 28class NVPTXTargetMachine; 29class FunctionPass; 30class MachineFunctionPass; 31class formatted_raw_ostream; 32 33namespace NVPTXCC { 34enum CondCodes { 35 EQ, 36 NE, 37 LT, 38 LE, 39 GT, 40 GE 41}; 42} 43 44inline static const char *NVPTXCondCodeToString(NVPTXCC::CondCodes CC) { 45 switch (CC) { 46 case NVPTXCC::NE: 47 return "ne"; 48 case NVPTXCC::EQ: 49 return "eq"; 50 case NVPTXCC::LT: 51 return "lt"; 52 case NVPTXCC::LE: 53 return "le"; 54 case NVPTXCC::GT: 55 return "gt"; 56 case NVPTXCC::GE: 57 return "ge"; 58 } 59 llvm_unreachable("Unknown condition code"); 60} 61 62FunctionPass * 63createNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOpt::Level OptLevel); 64FunctionPass *createLowerStructArgsPass(NVPTXTargetMachine &); 65FunctionPass *createNVPTXReMatPass(NVPTXTargetMachine &); 66FunctionPass *createNVPTXReMatBlockPass(NVPTXTargetMachine &); 67ModulePass *createGenericToNVVMPass(); 68ModulePass *createNVVMReflectPass(); 69ModulePass *createNVVMReflectPass(const StringMap<int>& Mapping); 70MachineFunctionPass *createNVPTXPrologEpilogPass(); 71 72bool isImageOrSamplerVal(const Value *, const Module *); 73 74extern Target TheNVPTXTarget32; 75extern Target TheNVPTXTarget64; 76 77namespace NVPTX { 78enum DrvInterface { 79 NVCL, 80 CUDA 81}; 82 83// A field inside TSFlags needs a shift and a mask. The usage is 84// always as follows : 85// ((TSFlags & fieldMask) >> fieldShift) 86// The enum keeps the mask, the shift, and all valid values of the 87// field in one place. 88enum VecInstType { 89 VecInstTypeShift = 0, 90 VecInstTypeMask = 0xF, 91 92 VecNOP = 0, 93 VecLoad = 1, 94 VecStore = 2, 95 VecBuild = 3, 96 VecShuffle = 4, 97 VecExtract = 5, 98 VecInsert = 6, 99 VecDest = 7, 100 VecOther = 15 101}; 102 103enum SimpleMove { 104 SimpleMoveMask = 0x10, 105 SimpleMoveShift = 4 106}; 107enum LoadStore { 108 isLoadMask = 0x20, 109 isLoadShift = 5, 110 isStoreMask = 0x40, 111 isStoreShift = 6 112}; 113 114namespace PTXLdStInstCode { 115enum AddressSpace { 116 GENERIC = 0, 117 GLOBAL = 1, 118 CONSTANT = 2, 119 SHARED = 3, 120 PARAM = 4, 121 LOCAL = 5 122}; 123enum FromType { 124 Unsigned = 0, 125 Signed, 126 Float 127}; 128enum VecType { 129 Scalar = 1, 130 V2 = 2, 131 V4 = 4 132}; 133} 134} 135} // end namespace llvm; 136 137// Defines symbolic names for NVPTX registers. This defines a mapping from 138// register name to register number. 139#define GET_REGINFO_ENUM 140#include "NVPTXGenRegisterInfo.inc" 141 142// Defines symbolic names for the NVPTX instructions. 143#define GET_INSTRINFO_ENUM 144#include "NVPTXGenInstrInfo.inc" 145 146#endif 147