NVPTX.h revision 263508
198944Sobrien//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===// 298944Sobrien// 398944Sobrien// The LLVM Compiler Infrastructure 498944Sobrien// 598944Sobrien// This file is distributed under the University of Illinois Open Source 698944Sobrien// License. See LICENSE.TXT for details. 798944Sobrien// 898944Sobrien//===----------------------------------------------------------------------===// 998944Sobrien// 1098944Sobrien// This file contains the entry points for global functions defined in 1198944Sobrien// the LLVM NVPTX back-end. 1298944Sobrien// 1398944Sobrien//===----------------------------------------------------------------------===// 1498944Sobrien 1598944Sobrien#ifndef LLVM_TARGET_NVPTX_H 1698944Sobrien#define LLVM_TARGET_NVPTX_H 1798944Sobrien 1898944Sobrien#include "MCTargetDesc/NVPTXBaseInfo.h" 1998944Sobrien#include "llvm/ADT/StringMap.h" 2098944Sobrien#include "llvm/IR/Module.h" 2198944Sobrien#include "llvm/IR/Value.h" 2298944Sobrien#include "llvm/Support/ErrorHandling.h" 2398944Sobrien#include "llvm/Target/TargetMachine.h" 2498944Sobrien#include <cassert> 2598944Sobrien#include <iosfwd> 2698944Sobrien 2798944Sobriennamespace llvm { 2898944Sobrienclass NVPTXTargetMachine; 2998944Sobrienclass FunctionPass; 3098944Sobrienclass MachineFunctionPass; 3198944Sobrienclass formatted_raw_ostream; 3298944Sobrien 3398944Sobriennamespace NVPTXCC { 3498944Sobrienenum CondCodes { 3598944Sobrien EQ, 3698944Sobrien NE, 3798944Sobrien LT, 3898944Sobrien LE, 3998944Sobrien GT, 40130803Smarcel GE 4198944Sobrien}; 4298944Sobrien} 4398944Sobrien 4498944Sobrieninline static const char *NVPTXCondCodeToString(NVPTXCC::CondCodes CC) { 4598944Sobrien switch (CC) { 4698944Sobrien case NVPTXCC::NE: 4798944Sobrien return "ne"; 4898944Sobrien case NVPTXCC::EQ: 4998944Sobrien return "eq"; 5098944Sobrien case NVPTXCC::LT: 5198944Sobrien return "lt"; 5298944Sobrien case NVPTXCC::LE: 5398944Sobrien return "le"; 5498944Sobrien case NVPTXCC::GT: 5598944Sobrien return "gt"; 5698944Sobrien case NVPTXCC::GE: 5798944Sobrien return "ge"; 5898944Sobrien } 59130803Smarcel llvm_unreachable("Unknown condition code"); 6098944Sobrien} 6198944Sobrien 6298944SobrienFunctionPass * 6398944SobriencreateNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOpt::Level OptLevel); 6498944SobrienModulePass *createGenericToNVVMPass(); 6598944SobrienModulePass *createNVVMReflectPass(); 6698944SobrienModulePass *createNVVMReflectPass(const StringMap<int>& Mapping); 6798944SobrienMachineFunctionPass *createNVPTXPrologEpilogPass(); 6898944Sobrien 6998944Sobrienbool isImageOrSamplerVal(const Value *, const Module *); 7098944Sobrien 7198944Sobrienextern Target TheNVPTXTarget32; 7298944Sobrienextern Target TheNVPTXTarget64; 7398944Sobrien 7498944Sobriennamespace NVPTX { 7598944Sobrienenum DrvInterface { 7698944Sobrien NVCL, 7798944Sobrien CUDA 7898944Sobrien}; 7998944Sobrien 8098944Sobrien// A field inside TSFlags needs a shift and a mask. The usage is 8198944Sobrien// always as follows : 8298944Sobrien// ((TSFlags & fieldMask) >> fieldShift) 8398944Sobrien// The enum keeps the mask, the shift, and all valid values of the 8498944Sobrien// field in one place. 8598944Sobrienenum VecInstType { 8698944Sobrien VecInstTypeShift = 0, 8798944Sobrien VecInstTypeMask = 0xF, 8898944Sobrien 8998944Sobrien VecNOP = 0, 9098944Sobrien VecLoad = 1, 9198944Sobrien VecStore = 2, 9298944Sobrien VecBuild = 3, 9398944Sobrien VecShuffle = 4, 9498944Sobrien VecExtract = 5, 9598944Sobrien VecInsert = 6, 9698944Sobrien VecDest = 7, 97130803Smarcel VecOther = 15 98130803Smarcel}; 9998944Sobrien 10098944Sobrienenum SimpleMove { 10198944Sobrien SimpleMoveMask = 0x10, 10298944Sobrien SimpleMoveShift = 4 10398944Sobrien}; 10498944Sobrienenum LoadStore { 10598944Sobrien isLoadMask = 0x20, 10698944Sobrien isLoadShift = 5, 10798944Sobrien isStoreMask = 0x40, 10898944Sobrien isStoreShift = 6 10998944Sobrien}; 110130803Smarcel 11198944Sobriennamespace PTXLdStInstCode { 11298944Sobrienenum AddressSpace { 113130803Smarcel GENERIC = 0, 114130803Smarcel GLOBAL = 1, 11598944Sobrien CONSTANT = 2, 11698944Sobrien SHARED = 3, 11798944Sobrien PARAM = 4, 11898944Sobrien LOCAL = 5 11998944Sobrien}; 12098944Sobrienenum FromType { 12198944Sobrien Unsigned = 0, 12298944Sobrien Signed, 12398944Sobrien Float 12498944Sobrien}; 12598944Sobrienenum VecType { 12698944Sobrien Scalar = 1, 12798944Sobrien V2 = 2, 12898944Sobrien V4 = 4 12998944Sobrien}; 13098944Sobrien} 13198944Sobrien 13298944Sobrien/// PTXCvtMode - Conversion code enumeration 13398944Sobriennamespace PTXCvtMode { 13498944Sobrienenum CvtMode { 13598944Sobrien NONE = 0, 13698944Sobrien RNI, 13798944Sobrien RZI, 13898944Sobrien RMI, 13998944Sobrien RPI, 14098944Sobrien RN, 14198944Sobrien RZ, 14298944Sobrien RM, 14398944Sobrien RP, 14498944Sobrien 14598944Sobrien BASE_MASK = 0x0F, 14698944Sobrien FTZ_FLAG = 0x10, 14798944Sobrien SAT_FLAG = 0x20 14898944Sobrien}; 14998944Sobrien} 15098944Sobrien 15198944Sobrien/// PTXCmpMode - Comparison mode enumeration 15298944Sobriennamespace PTXCmpMode { 15398944Sobrienenum CmpMode { 15498944Sobrien EQ = 0, 15598944Sobrien NE, 15698944Sobrien LT, 15798944Sobrien LE, 158130803Smarcel GT, 159130803Smarcel GE, 160130803Smarcel LO, 161130803Smarcel LS, 162130803Smarcel HI, 163130803Smarcel HS, 16498944Sobrien EQU, 16598944Sobrien NEU, 166130803Smarcel LTU, 16798944Sobrien LEU, 16898944Sobrien GTU, 16998944Sobrien GEU, 17098944Sobrien NUM, 17198944Sobrien // NAN is a MACRO 17298944Sobrien NotANumber, 17398944Sobrien 17498944Sobrien BASE_MASK = 0xFF, 17598944Sobrien FTZ_FLAG = 0x100 17698944Sobrien}; 17798944Sobrien} 17898944Sobrien} 17998944Sobrien} // end namespace llvm; 18098944Sobrien 18198944Sobrien// Defines symbolic names for NVPTX registers. This defines a mapping from 18298944Sobrien// register name to register number. 18398944Sobrien#define GET_REGINFO_ENUM 184130803Smarcel#include "NVPTXGenRegisterInfo.inc" 185130803Smarcel 18698944Sobrien// Defines symbolic names for the NVPTX instructions. 18798944Sobrien#define GET_INSTRINFO_ENUM 18898944Sobrien#include "NVPTXGenInstrInfo.inc" 18998944Sobrien 19098944Sobrien#endif 19198944Sobrien