LLVM 22.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
18#include "llvm/IR/PassManager.h"
19#include "llvm/Pass.h"
23namespace llvm {
24class FunctionPass;
25class MachineFunctionPass;
26class NVPTXTargetMachine;
27class PassRegistry;
28
29namespace NVPTXCC {
36 GE
37};
38}
39
40FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
41 llvm::CodeGenOptLevel OptLevel);
46ModulePass *createNVVMReflectPass(unsigned int SmVersion);
53 bool NoTrapAfterNoreturn);
58
80
81struct NVVMIntrRangePass : PassInfoMixin<NVVMIntrRangePass> {
83};
84
85struct NVVMReflectPass : PassInfoMixin<NVVMReflectPass> {
86 NVVMReflectPass() : SmVersion(0) {}
87 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
89
90private:
91 unsigned SmVersion;
92};
93
94struct GenericToNVVMPass : PassInfoMixin<GenericToNVVMPass> {
96};
97
98struct NVPTXCopyByValArgsPass : PassInfoMixin<NVPTXCopyByValArgsPass> {
100};
101
102struct NVPTXLowerArgsPass : PassInfoMixin<NVPTXLowerArgsPass> {
103private:
104 TargetMachine &TM;
105
106public:
109};
110
111struct NVPTXTagInvariantLoadsPass : PassInfoMixin<NVPTXTagInvariantLoadsPass> {
113};
114
115namespace NVPTX {
118 CUDA
120
121// A field inside TSFlags needs a shift and a mask. The usage is
122// always as follows :
123// ((TSFlags & fieldMask) >> fieldShift)
124// The enum keeps the mask, the shift, and all valid values of the
125// field in one place.
129
138 VecOther = 15
140
149 isStoreShift = 6
151
152// Extends LLVM AtomicOrdering with PTX Orderings:
153using OrderingUnderlyingType = unsigned int;
156 AtomicOrdering::NotAtomic, // PTX calls these: "Weak"
157 // Unordered = 1, // NVPTX maps LLVM Unorderd to Relaxed
159 // Consume = 3, // Unimplemented in LLVM; NVPTX would map to "Acquire"
167};
168
169using ScopeUnderlyingType = unsigned int;
172 Block = 1,
176 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
179
180using AddressSpaceUnderlyingType = unsigned int;
185 Const = 4,
186 Local = 5,
188
189 // NVPTX Backend Private:
190 Param = 101
192
193namespace PTXLdStInstCode {
195} // namespace PTXLdStInstCode
196
197/// PTXCvtMode - Conversion code enumeration
198namespace PTXCvtMode {
200 NONE = 0,
210
211 BASE_MASK = 0x0F,
212 FTZ_FLAG = 0x10,
213 SAT_FLAG = 0x20,
214 RELU_FLAG = 0x40
216}
217
218/// PTXCmpMode - Comparison mode enumeration
219namespace PTXCmpMode {
221 EQ = 0,
234 // NAN is a MACRO
236};
237}
238
239namespace PTXPrmtMode {
248};
249}
250
251enum class DivPrecisionLevel : unsigned {
252 Approx = 0,
253 Full = 1,
254 IEEE754 = 2,
255 IEEE754_NoFTZ = 3,
256};
257
258} // namespace NVPTX
260} // namespace llvm
261
262// Defines symbolic names for NVPTX registers. This defines a mapping from
263// register name to register number.
264#define GET_REGINFO_ENUM
265#include "NVPTXGenRegisterInfo.inc"
266
267// Defines symbolic names for the NVPTX instructions.
268#define GET_INSTRINFO_ENUM
269#define GET_INSTRINFO_MC_HELPER_DECLS
270#include "NVPTXGenInstrInfo.inc"
271
272#endif
Atomic ordering constants.
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition: MD5.cpp:55
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:255
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:314
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition: Pass.h:255
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:67
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: Analysis.h:112
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:83
AddressSpace
Definition: NVPTX.h:181
@ Global
Definition: NVPTX.h:183
@ SharedCluster
Definition: NVPTX.h:187
@ Shared
Definition: NVPTX.h:184
@ Generic
Definition: NVPTX.h:182
@ VecOther
Definition: NVPTX.h:138
@ VecInstTypeShift
Definition: NVPTX.h:127
@ VecExtract
Definition: NVPTX.h:135
@ VecInsert
Definition: NVPTX.h:136
@ VecShuffle
Definition: NVPTX.h:134
@ VecBuild
Definition: NVPTX.h:133
@ VecInstTypeMask
Definition: NVPTX.h:128
@ VecLoad
Definition: NVPTX.h:131
@ VecDest
Definition: NVPTX.h:137
@ VecStore
Definition: NVPTX.h:132
@ VecNOP
Definition: NVPTX.h:130
unsigned int AddressSpaceUnderlyingType
Definition: NVPTX.h:180
unsigned int OrderingUnderlyingType
Definition: NVPTX.h:153
unsigned int ScopeUnderlyingType
Definition: NVPTX.h:169
DrvInterface
Definition: NVPTX.h:116
DivPrecisionLevel
Definition: NVPTX.h:251
@ System
Definition: NVPTX.h:175
@ Cluster
Definition: NVPTX.h:173
@ Thread
Definition: NVPTX.h:171
@ Device
Definition: NVPTX.h:174
@ DefaultDevice
Definition: NVPTX.h:176
@ LASTSCOPE
Definition: NVPTX.h:177
@ RelaxedMMIO
Definition: NVPTX.h:166
@ Acquire
Definition: NVPTX.h:160
@ Relaxed
Definition: NVPTX.h:158
@ AcquireRelease
Definition: NVPTX.h:162
@ NotAtomic
Definition: NVPTX.h:155
@ Volatile
Definition: NVPTX.h:165
@ Release
Definition: NVPTX.h:161
@ SequentiallyConsistent
Definition: NVPTX.h:163
@ isStoreShift
Definition: NVPTX.h:149
@ isLoadShift
Definition: NVPTX.h:147
@ isLoadMask
Definition: NVPTX.h:146
@ isStoreMask
Definition: NVPTX.h:148
@ SimpleMoveShift
Definition: NVPTX.h:143
@ SimpleMoveMask
Definition: NVPTX.h:142
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void initializeNVPTXLowerAllocaPass(PassRegistry &)
ModulePass * createNVPTXAssignValidGlobalNamesPass()
void initializeNVPTXPrologEpilogPassPass(PassRegistry &)
MachineFunctionPass * createNVPTXReplaceImageHandlesPass()
FunctionPass * createNVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
void initializeNVPTXAssignValidGlobalNamesPass(PassRegistry &)
ModulePass * createGenericToNVVMLegacyPass()
void initializeNVPTXLowerAggrCopiesPass(PassRegistry &)
void initializeNVPTXExternalAAWrapperPass(PassRegistry &)
MachineFunctionPass * createNVPTXPrologEpilogPass()
MachineFunctionPass * createNVPTXProxyRegErasurePass()
void initializeNVPTXLowerArgsLegacyPassPass(PassRegistry &)
MachineFunctionPass * createNVPTXPeephole()
void initializeNVVMReflectPass(PassRegistry &)
FunctionPass * createNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOptLevel OptLevel)
createNVPTXISelDag - This pass converts a legalized DAG into a NVPTX-specific DAG,...
void initializeGenericToNVVMLegacyPassPass(PassRegistry &)
void initializeNVPTXPeepholePass(PassRegistry &)
void initializeNVPTXCtorDtorLoweringLegacyPass(PassRegistry &)
void initializeNVPTXLowerUnreachablePass(PassRegistry &)
FunctionPass * createNVPTXTagInvariantLoadsPass()
void initializeNVVMReflectLegacyPassPass(PassRegistry &)
FunctionPass * createNVPTXLowerArgsPass()
void initializeNVPTXAAWrapperPassPass(PassRegistry &)
FunctionPass * createNVPTXImageOptimizerPass()
FunctionPass * createNVPTXLowerAllocaPass()
MachineFunctionPass * createNVPTXForwardParamsPass()
void initializeNVVMIntrRangePass(PassRegistry &)
CodeGenOptLevel
Code generation optimization level.
Definition: CodeGen.h:82
void initializeNVPTXAsmPrinterPass(PassRegistry &)
void initializeNVPTXTagInvariantLoadLegacyPassPass(PassRegistry &)
ModulePass * createNVPTXCtorDtorLoweringLegacyPass()
void initializeNVPTXAllocaHoistingPass(PassRegistry &)
void initializeNVPTXProxyRegErasurePass(PassRegistry &)
ModulePass * createNVVMReflectPass(unsigned int SmVersion)
FunctionPass * createNVVMIntrRangePass()
void initializeNVPTXAtomicLowerPass(PassRegistry &)
void initializeNVPTXForwardParamsPassPass(PassRegistry &)
void initializeNVPTXDAGToDAGISelLegacyPass(PassRegistry &)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
NVPTXLowerArgsPass(TargetMachine &TM)
Definition: NVPTX.h:107
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &F, ModuleAnalysisManager &AM)
NVVMReflectPass(unsigned SmVersion)
Definition: NVPTX.h:87
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:70