NVPTX.h revision 249423
1239310Sdim//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===// 2239310Sdim// 3239310Sdim// The LLVM Compiler Infrastructure 4239310Sdim// 5239310Sdim// This file is distributed under the University of Illinois Open Source 6239310Sdim// License. See LICENSE.TXT for details. 7239310Sdim// 8239310Sdim//===----------------------------------------------------------------------===// 9239310Sdim// 10239310Sdim// This file contains the entry points for global functions defined in 11239310Sdim// the LLVM NVPTX back-end. 12239310Sdim// 13239310Sdim//===----------------------------------------------------------------------===// 14239310Sdim 15239310Sdim#ifndef LLVM_TARGET_NVPTX_H 16239310Sdim#define LLVM_TARGET_NVPTX_H 17239310Sdim 18249423Sdim#include "MCTargetDesc/NVPTXBaseInfo.h" 19249423Sdim#include "llvm/IR/Module.h" 20249423Sdim#include "llvm/IR/Value.h" 21239310Sdim#include "llvm/Support/ErrorHandling.h" 22239310Sdim#include "llvm/Target/TargetMachine.h" 23239310Sdim#include <cassert> 24239310Sdim#include <iosfwd> 25239310Sdim 26239310Sdimnamespace llvm { 27239310Sdimclass NVPTXTargetMachine; 28239310Sdimclass FunctionPass; 29239310Sdimclass formatted_raw_ostream; 30239310Sdim 31239310Sdimnamespace NVPTXCC { 32239310Sdimenum CondCodes { 33239310Sdim EQ, 34239310Sdim NE, 35239310Sdim LT, 36239310Sdim LE, 37239310Sdim GT, 38239310Sdim GE 39239310Sdim}; 40239310Sdim} 41239310Sdim 42239310Sdiminline static const char *NVPTXCondCodeToString(NVPTXCC::CondCodes CC) { 43239310Sdim switch (CC) { 44249423Sdim case NVPTXCC::NE: 45249423Sdim return "ne"; 46249423Sdim case NVPTXCC::EQ: 47249423Sdim return "eq"; 48249423Sdim case NVPTXCC::LT: 49249423Sdim return "lt"; 50249423Sdim case NVPTXCC::LE: 51249423Sdim return "le"; 52249423Sdim case NVPTXCC::GT: 53249423Sdim return "gt"; 54249423Sdim case NVPTXCC::GE: 55249423Sdim return "ge"; 56239310Sdim } 57239310Sdim llvm_unreachable("Unknown condition code"); 58239310Sdim} 59239310Sdim 60249423SdimFunctionPass * 61249423SdimcreateNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOpt::Level OptLevel); 62239310SdimFunctionPass *createLowerStructArgsPass(NVPTXTargetMachine &); 63239310SdimFunctionPass *createNVPTXReMatPass(NVPTXTargetMachine &); 64239310SdimFunctionPass *createNVPTXReMatBlockPass(NVPTXTargetMachine &); 65239310Sdim 66239310Sdimbool isImageOrSamplerVal(const Value *, const Module *); 67239310Sdim 68239310Sdimextern Target TheNVPTXTarget32; 69239310Sdimextern Target TheNVPTXTarget64; 70239310Sdim 71249423Sdimnamespace NVPTX { 72239310Sdimenum DrvInterface { 73239310Sdim NVCL, 74239310Sdim CUDA, 75239310Sdim TEST 76239310Sdim}; 77239310Sdim 78239310Sdim// A field inside TSFlags needs a shift and a mask. The usage is 79239310Sdim// always as follows : 80239310Sdim// ((TSFlags & fieldMask) >> fieldShift) 81239310Sdim// The enum keeps the mask, the shift, and all valid values of the 82239310Sdim// field in one place. 83239310Sdimenum VecInstType { 84239310Sdim VecInstTypeShift = 0, 85239310Sdim VecInstTypeMask = 0xF, 86239310Sdim 87239310Sdim VecNOP = 0, 88239310Sdim VecLoad = 1, 89239310Sdim VecStore = 2, 90239310Sdim VecBuild = 3, 91239310Sdim VecShuffle = 4, 92239310Sdim VecExtract = 5, 93239310Sdim VecInsert = 6, 94239310Sdim VecDest = 7, 95239310Sdim VecOther = 15 96239310Sdim}; 97239310Sdim 98239310Sdimenum SimpleMove { 99239310Sdim SimpleMoveMask = 0x10, 100239310Sdim SimpleMoveShift = 4 101239310Sdim}; 102239310Sdimenum LoadStore { 103239310Sdim isLoadMask = 0x20, 104239310Sdim isLoadShift = 5, 105239310Sdim isStoreMask = 0x40, 106239310Sdim isStoreShift = 6 107239310Sdim}; 108239310Sdim 109239310Sdimnamespace PTXLdStInstCode { 110249423Sdimenum AddressSpace { 111239310Sdim GENERIC = 0, 112239310Sdim GLOBAL = 1, 113239310Sdim CONSTANT = 2, 114239310Sdim SHARED = 3, 115239310Sdim PARAM = 4, 116239310Sdim LOCAL = 5 117239310Sdim}; 118239310Sdimenum FromType { 119239310Sdim Unsigned = 0, 120239310Sdim Signed, 121239310Sdim Float 122239310Sdim}; 123239310Sdimenum VecType { 124239310Sdim Scalar = 1, 125239310Sdim V2 = 2, 126239310Sdim V4 = 4 127239310Sdim}; 128239310Sdim} 129239310Sdim} 130239310Sdim} // end namespace llvm; 131239310Sdim 132239310Sdim// Defines symbolic names for NVPTX registers. This defines a mapping from 133239310Sdim// register name to register number. 134239310Sdim#define GET_REGINFO_ENUM 135239310Sdim#include "NVPTXGenRegisterInfo.inc" 136239310Sdim 137239310Sdim// Defines symbolic names for the NVPTX instructions. 138239310Sdim#define GET_INSTRINFO_ENUM 139239310Sdim#include "NVPTXGenInstrInfo.inc" 140239310Sdim 141239310Sdim#endif 142