Path: blob/main/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTX.h
35271 views
//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file contains the entry points for global functions defined in9// the LLVM NVPTX back-end.10//11//===----------------------------------------------------------------------===//1213#ifndef LLVM_LIB_TARGET_NVPTX_NVPTX_H14#define LLVM_LIB_TARGET_NVPTX_NVPTX_H1516#include "llvm/IR/PassManager.h"17#include "llvm/Pass.h"18#include "llvm/Support/CodeGen.h"1920namespace llvm {21class FunctionPass;22class MachineFunctionPass;23class NVPTXTargetMachine;24class PassRegistry;2526namespace NVPTXCC {27enum CondCodes {28EQ,29NE,30LT,31LE,32GT,33GE34};35}3637FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,38llvm::CodeGenOptLevel OptLevel);39ModulePass *createNVPTXAssignValidGlobalNamesPass();40ModulePass *createGenericToNVVMLegacyPass();41ModulePass *createNVPTXCtorDtorLoweringLegacyPass();42FunctionPass *createNVVMIntrRangePass();43FunctionPass *createNVVMReflectPass(unsigned int SmVersion);44MachineFunctionPass *createNVPTXPrologEpilogPass();45MachineFunctionPass *createNVPTXReplaceImageHandlesPass();46FunctionPass *createNVPTXImageOptimizerPass();47FunctionPass *createNVPTXLowerArgsPass();48FunctionPass *createNVPTXLowerAllocaPass();49FunctionPass *createNVPTXLowerUnreachablePass(bool TrapUnreachable,50bool NoTrapAfterNoreturn);51MachineFunctionPass *createNVPTXPeephole();52MachineFunctionPass *createNVPTXProxyRegErasurePass();5354struct NVVMIntrRangePass : PassInfoMixin<NVVMIntrRangePass> {55PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);56};5758struct NVVMReflectPass : PassInfoMixin<NVVMReflectPass> {59NVVMReflectPass();60NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}61PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);6263private:64unsigned SmVersion;65};6667struct GenericToNVVMPass : PassInfoMixin<GenericToNVVMPass> {68PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);69};7071namespace NVPTX {72enum DrvInterface {73NVCL,74CUDA75};7677// A field inside TSFlags needs a shift and a mask. The usage is78// always as follows :79// ((TSFlags & fieldMask) >> fieldShift)80// The enum keeps the mask, the shift, and all valid values of the81// field in one place.82enum VecInstType {83VecInstTypeShift = 0,84VecInstTypeMask = 0xF,8586VecNOP = 0,87VecLoad = 1,88VecStore = 2,89VecBuild = 3,90VecShuffle = 4,91VecExtract = 5,92VecInsert = 6,93VecDest = 7,94VecOther = 1595};9697enum SimpleMove {98SimpleMoveMask = 0x10,99SimpleMoveShift = 4100};101enum LoadStore {102isLoadMask = 0x20,103isLoadShift = 5,104isStoreMask = 0x40,105isStoreShift = 6106};107108namespace PTXLdStInstCode {109enum AddressSpace {110GENERIC = 0,111GLOBAL = 1,112CONSTANT = 2,113SHARED = 3,114PARAM = 4,115LOCAL = 5116};117enum FromType {118Unsigned = 0,119Signed,120Float,121Untyped122};123enum VecType {124Scalar = 1,125V2 = 2,126V4 = 4127};128}129130/// PTXCvtMode - Conversion code enumeration131namespace PTXCvtMode {132enum CvtMode {133NONE = 0,134RNI,135RZI,136RMI,137RPI,138RN,139RZ,140RM,141RP,142RNA,143144BASE_MASK = 0x0F,145FTZ_FLAG = 0x10,146SAT_FLAG = 0x20,147RELU_FLAG = 0x40148};149}150151/// PTXCmpMode - Comparison mode enumeration152namespace PTXCmpMode {153enum CmpMode {154EQ = 0,155NE,156LT,157LE,158GT,159GE,160LO,161LS,162HI,163HS,164EQU,165NEU,166LTU,167LEU,168GTU,169GEU,170NUM,171// NAN is a MACRO172NotANumber,173174BASE_MASK = 0xFF,175FTZ_FLAG = 0x100176};177}178179namespace PTXPrmtMode {180enum PrmtMode {181NONE,182F4E,183B4E,184RC8,185ECL,186ECR,187RC16,188};189}190}191void initializeNVPTXDAGToDAGISelLegacyPass(PassRegistry &);192} // namespace llvm193194// Defines symbolic names for NVPTX registers. This defines a mapping from195// register name to register number.196#define GET_REGINFO_ENUM197#include "NVPTXGenRegisterInfo.inc"198199// Defines symbolic names for the NVPTX instructions.200#define GET_INSTRINFO_ENUM201#define GET_INSTRINFO_MC_HELPER_DECLS202#include "NVPTXGenInstrInfo.inc"203204#endif205206207