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