forked from OSchip/llvm-project
187 lines
3.7 KiB
C++
187 lines
3.7 KiB
C++
//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the entry points for global functions defined in
|
|
// the LLVM NVPTX back-end.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_NVPTX_NVPTX_H
|
|
#define LLVM_LIB_TARGET_NVPTX_NVPTX_H
|
|
|
|
#include "llvm/IR/PassManager.h"
|
|
#include "llvm/Pass.h"
|
|
#include "llvm/Support/CodeGen.h"
|
|
|
|
namespace llvm {
|
|
class NVPTXTargetMachine;
|
|
class FunctionPass;
|
|
class MachineFunctionPass;
|
|
|
|
namespace NVPTXCC {
|
|
enum CondCodes {
|
|
EQ,
|
|
NE,
|
|
LT,
|
|
LE,
|
|
GT,
|
|
GE
|
|
};
|
|
}
|
|
|
|
FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
|
|
llvm::CodeGenOpt::Level OptLevel);
|
|
ModulePass *createNVPTXAssignValidGlobalNamesPass();
|
|
ModulePass *createGenericToNVVMPass();
|
|
FunctionPass *createNVVMIntrRangePass(unsigned int SmVersion);
|
|
FunctionPass *createNVVMReflectPass(unsigned int SmVersion);
|
|
MachineFunctionPass *createNVPTXPrologEpilogPass();
|
|
MachineFunctionPass *createNVPTXReplaceImageHandlesPass();
|
|
FunctionPass *createNVPTXImageOptimizerPass();
|
|
FunctionPass *createNVPTXLowerArgsPass(const NVPTXTargetMachine *TM);
|
|
FunctionPass *createNVPTXLowerAllocaPass();
|
|
MachineFunctionPass *createNVPTXPeephole();
|
|
MachineFunctionPass *createNVPTXProxyRegErasurePass();
|
|
|
|
struct NVVMIntrRangePass : PassInfoMixin<NVVMIntrRangePass> {
|
|
NVVMIntrRangePass();
|
|
NVVMIntrRangePass(unsigned SmVersion) : SmVersion(SmVersion) {}
|
|
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
|
|
|
private:
|
|
unsigned SmVersion;
|
|
};
|
|
|
|
struct NVVMReflectPass : PassInfoMixin<NVVMReflectPass> {
|
|
NVVMReflectPass();
|
|
NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
|
|
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
|
|
|
private:
|
|
unsigned SmVersion;
|
|
};
|
|
|
|
namespace NVPTX {
|
|
enum DrvInterface {
|
|
NVCL,
|
|
CUDA
|
|
};
|
|
|
|
// A field inside TSFlags needs a shift and a mask. The usage is
|
|
// always as follows :
|
|
// ((TSFlags & fieldMask) >> fieldShift)
|
|
// The enum keeps the mask, the shift, and all valid values of the
|
|
// field in one place.
|
|
enum VecInstType {
|
|
VecInstTypeShift = 0,
|
|
VecInstTypeMask = 0xF,
|
|
|
|
VecNOP = 0,
|
|
VecLoad = 1,
|
|
VecStore = 2,
|
|
VecBuild = 3,
|
|
VecShuffle = 4,
|
|
VecExtract = 5,
|
|
VecInsert = 6,
|
|
VecDest = 7,
|
|
VecOther = 15
|
|
};
|
|
|
|
enum SimpleMove {
|
|
SimpleMoveMask = 0x10,
|
|
SimpleMoveShift = 4
|
|
};
|
|
enum LoadStore {
|
|
isLoadMask = 0x20,
|
|
isLoadShift = 5,
|
|
isStoreMask = 0x40,
|
|
isStoreShift = 6
|
|
};
|
|
|
|
namespace PTXLdStInstCode {
|
|
enum AddressSpace {
|
|
GENERIC = 0,
|
|
GLOBAL = 1,
|
|
CONSTANT = 2,
|
|
SHARED = 3,
|
|
PARAM = 4,
|
|
LOCAL = 5
|
|
};
|
|
enum FromType {
|
|
Unsigned = 0,
|
|
Signed,
|
|
Float,
|
|
Untyped
|
|
};
|
|
enum VecType {
|
|
Scalar = 1,
|
|
V2 = 2,
|
|
V4 = 4
|
|
};
|
|
}
|
|
|
|
/// PTXCvtMode - Conversion code enumeration
|
|
namespace PTXCvtMode {
|
|
enum CvtMode {
|
|
NONE = 0,
|
|
RNI,
|
|
RZI,
|
|
RMI,
|
|
RPI,
|
|
RN,
|
|
RZ,
|
|
RM,
|
|
RP,
|
|
|
|
BASE_MASK = 0x0F,
|
|
FTZ_FLAG = 0x10,
|
|
SAT_FLAG = 0x20
|
|
};
|
|
}
|
|
|
|
/// PTXCmpMode - Comparison mode enumeration
|
|
namespace PTXCmpMode {
|
|
enum CmpMode {
|
|
EQ = 0,
|
|
NE,
|
|
LT,
|
|
LE,
|
|
GT,
|
|
GE,
|
|
LO,
|
|
LS,
|
|
HI,
|
|
HS,
|
|
EQU,
|
|
NEU,
|
|
LTU,
|
|
LEU,
|
|
GTU,
|
|
GEU,
|
|
NUM,
|
|
// NAN is a MACRO
|
|
NotANumber,
|
|
|
|
BASE_MASK = 0xFF,
|
|
FTZ_FLAG = 0x100
|
|
};
|
|
}
|
|
}
|
|
} // end namespace llvm;
|
|
|
|
// Defines symbolic names for NVPTX registers. This defines a mapping from
|
|
// register name to register number.
|
|
#define GET_REGINFO_ENUM
|
|
#include "NVPTXGenRegisterInfo.inc"
|
|
|
|
// Defines symbolic names for the NVPTX instructions.
|
|
#define GET_INSTRINFO_ENUM
|
|
#include "NVPTXGenInstrInfo.inc"
|
|
|
|
#endif
|