LLVM 17.0.0git
NVPTX.h
Go to the documentation of this file.
1//===-- NVPTX.h - Top-level interface for NVPTX representation --*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the entry points for global functions defined in
10// the LLVM NVPTX back-end.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_NVPTX_NVPTX_H
15#define LLVM_LIB_TARGET_NVPTX_NVPTX_H
16
17#include "llvm/IR/PassManager.h"
18#include "llvm/Pass.h"
20
21namespace llvm {
22class FunctionPass;
23class MachineFunctionPass;
24class NVPTXTargetMachine;
25class PassRegistry;
26
27namespace NVPTXCC {
34 GE
35};
36}
37
38FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
41ModulePass *createGenericToNVVMPass();
42FunctionPass *createNVVMIntrRangePass(unsigned int SmVersion);
43FunctionPass *createNVVMReflectPass(unsigned int SmVersion);
44MachineFunctionPass *createNVPTXPrologEpilogPass();
45MachineFunctionPass *createNVPTXReplaceImageHandlesPass();
46FunctionPass *createNVPTXImageOptimizerPass();
47FunctionPass *createNVPTXLowerArgsPass();
48FunctionPass *createNVPTXLowerAllocaPass();
49MachineFunctionPass *createNVPTXPeephole();
50MachineFunctionPass *createNVPTXProxyRegErasurePass();
51
52struct NVVMIntrRangePass : PassInfoMixin<NVVMIntrRangePass> {
54 NVVMIntrRangePass(unsigned SmVersion) : SmVersion(SmVersion) {}
56
57private:
58 unsigned SmVersion;
59};
60
61struct NVVMReflectPass : PassInfoMixin<NVVMReflectPass> {
63 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
65
66private:
67 unsigned SmVersion;
68};
69
70namespace NVPTX {
73 CUDA
74};
75
76// A field inside TSFlags needs a shift and a mask. The usage is
77// always as follows :
78// ((TSFlags & fieldMask) >> fieldShift)
79// The enum keeps the mask, the shift, and all valid values of the
80// field in one place.
84
85 VecNOP = 0,
93 VecOther = 15
94};
95
99};
104 isStoreShift = 6
106
107namespace PTXLdStInstCode {
113 PARAM = 4,
114 LOCAL = 5
120 Untyped
124 V2 = 2,
125 V4 = 4
127}
128
129/// PTXCvtMode - Conversion code enumeration
130namespace PTXCvtMode {
132 NONE = 0,
142
143 BASE_MASK = 0x0F,
144 FTZ_FLAG = 0x10,
145 SAT_FLAG = 0x20,
146 RELU_FLAG = 0x40
148}
149
150/// PTXCmpMode - Comparison mode enumeration
151namespace PTXCmpMode {
153 EQ = 0,
170 // NAN is a MACRO
172
173 BASE_MASK = 0xFF,
174 FTZ_FLAG = 0x100
176}
177}
179} // namespace llvm
180
181// Defines symbolic names for NVPTX registers. This defines a mapping from
182// register name to register number.
183#define GET_REGINFO_ENUM
184#include "NVPTXGenRegisterInfo.inc"
185
186// Defines symbolic names for the NVPTX instructions.
187#define GET_INSTRINFO_ENUM
188#define GET_INSTRINFO_MC_HELPER_DECLS
189#include "NVPTXGenInstrInfo.inc"
190
191#endif
#define F(x, y, z)
Definition: MD5.cpp:55
unsigned SmVersion
Definition: NVVMReflect.cpp:78
const char LLVMTargetMachineRef TM
This header defines various interfaces for pass management in LLVM.
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:620
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
Definition: PassRegistry.h:38
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:152
Level
Code generation optimization level.
Definition: CodeGen.h:57
VecInstType
Definition: NVPTX.h:81
@ VecOther
Definition: NVPTX.h:93
@ VecInstTypeShift
Definition: NVPTX.h:82
@ VecExtract
Definition: NVPTX.h:90
@ VecInsert
Definition: NVPTX.h:91
@ VecShuffle
Definition: NVPTX.h:89
@ VecBuild
Definition: NVPTX.h:88
@ VecInstTypeMask
Definition: NVPTX.h:83
@ VecLoad
Definition: NVPTX.h:86
@ VecDest
Definition: NVPTX.h:92
@ VecStore
Definition: NVPTX.h:87
@ VecNOP
Definition: NVPTX.h:85
DrvInterface
Definition: NVPTX.h:71
@ NVCL
Definition: NVPTX.h:72
@ CUDA
Definition: NVPTX.h:73
@ isStoreShift
Definition: NVPTX.h:104
@ isLoadShift
Definition: NVPTX.h:102
@ isLoadMask
Definition: NVPTX.h:101
@ isStoreMask
Definition: NVPTX.h:103
SimpleMove
Definition: NVPTX.h:96
@ SimpleMoveShift
Definition: NVPTX.h:98
@ SimpleMoveMask
Definition: NVPTX.h:97
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
ModulePass * createNVPTXAssignValidGlobalNamesPass()
MachineFunctionPass * createNVPTXReplaceImageHandlesPass()
ModulePass * createGenericToNVVMPass()
FunctionPass * createNVVMReflectPass(unsigned int SmVersion)
Definition: NVVMReflect.cpp:65
MachineFunctionPass * createNVPTXPrologEpilogPass()
MachineFunctionPass * createNVPTXProxyRegErasurePass()
void initializeNVPTXDAGToDAGISelPass(PassRegistry &)
MachineFunctionPass * createNVPTXPeephole()
FunctionPass * createNVVMIntrRangePass(unsigned int SmVersion)
FunctionPass * createNVPTXLowerArgsPass()
FunctionPass * createNVPTXImageOptimizerPass()
FunctionPass * createNVPTXLowerAllocaPass()
FunctionPass * createNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOpt::Level OptLevel)
createNVPTXISelDag - This pass converts a legalized DAG into a NVPTX-specific DAG,...
NVVMIntrRangePass(unsigned SmVersion)
Definition: NVPTX.h:54
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
NVVMReflectPass(unsigned SmVersion)
Definition: NVPTX.h:63
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:371