Home | History | Annotate | Download | only in NVPTX
      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/IR/Module.h"
     20 #include "llvm/IR/Value.h"
     21 #include "llvm/Support/ErrorHandling.h"
     22 #include "llvm/Target/TargetMachine.h"
     23 #include <cassert>
     24 #include <iosfwd>
     25 
     26 namespace llvm {
     27 class NVPTXTargetMachine;
     28 class FunctionPass;
     29 class formatted_raw_ostream;
     30 
     31 namespace NVPTXCC {
     32 enum CondCodes {
     33   EQ,
     34   NE,
     35   LT,
     36   LE,
     37   GT,
     38   GE
     39 };
     40 }
     41 
     42 inline static const char *NVPTXCondCodeToString(NVPTXCC::CondCodes CC) {
     43   switch (CC) {
     44   case NVPTXCC::NE:  return "ne";
     45   case NVPTXCC::EQ:   return "eq";
     46   case NVPTXCC::LT:   return "lt";
     47   case NVPTXCC::LE:  return "le";
     48   case NVPTXCC::GT:  return "gt";
     49   case NVPTXCC::GE:   return "ge";
     50   }
     51   llvm_unreachable("Unknown condition code");
     52 }
     53 
     54 FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
     55                                  llvm::CodeGenOpt::Level OptLevel);
     56 FunctionPass *createLowerStructArgsPass(NVPTXTargetMachine &);
     57 FunctionPass *createNVPTXReMatPass(NVPTXTargetMachine &);
     58 FunctionPass *createNVPTXReMatBlockPass(NVPTXTargetMachine &);
     59 
     60 bool isImageOrSamplerVal(const Value *, const Module *);
     61 
     62 extern Target TheNVPTXTarget32;
     63 extern Target TheNVPTXTarget64;
     64 
     65 namespace NVPTX
     66 {
     67 enum DrvInterface {
     68   NVCL,
     69   CUDA,
     70   TEST
     71 };
     72 
     73 // A field inside TSFlags needs a shift and a mask. The usage is
     74 // always as follows :
     75 // ((TSFlags & fieldMask) >> fieldShift)
     76 // The enum keeps the mask, the shift, and all valid values of the
     77 // field in one place.
     78 enum VecInstType {
     79   VecInstTypeShift = 0,
     80   VecInstTypeMask = 0xF,
     81 
     82   VecNOP = 0,
     83   VecLoad = 1,
     84   VecStore = 2,
     85   VecBuild = 3,
     86   VecShuffle = 4,
     87   VecExtract = 5,
     88   VecInsert = 6,
     89   VecDest = 7,
     90   VecOther = 15
     91 };
     92 
     93 enum SimpleMove {
     94   SimpleMoveMask = 0x10,
     95   SimpleMoveShift = 4
     96 };
     97 enum LoadStore {
     98   isLoadMask = 0x20,
     99   isLoadShift = 5,
    100   isStoreMask = 0x40,
    101   isStoreShift = 6
    102 };
    103 
    104 namespace PTXLdStInstCode {
    105 enum AddressSpace{
    106   GENERIC = 0,
    107   GLOBAL = 1,
    108   CONSTANT = 2,
    109   SHARED = 3,
    110   PARAM = 4,
    111   LOCAL = 5
    112 };
    113 enum FromType {
    114   Unsigned = 0,
    115   Signed,
    116   Float
    117 };
    118 enum VecType {
    119   Scalar = 1,
    120   V2 = 2,
    121   V4 = 4
    122 };
    123 }
    124 }
    125 } // end namespace llvm;
    126 
    127 // Defines symbolic names for NVPTX registers.  This defines a mapping from
    128 // register name to register number.
    129 #define GET_REGINFO_ENUM
    130 #include "NVPTXGenRegisterInfo.inc"
    131 
    132 // Defines symbolic names for the NVPTX instructions.
    133 #define GET_INSTRINFO_ENUM
    134 #include "NVPTXGenInstrInfo.inc"
    135 
    136 #endif
    137