LLVM 24.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/ADT/Bitfields.h"
20#include "llvm/IR/PassManager.h"
21#include "llvm/Pass.h"
26
27namespace llvm {
29class FunctionPass;
32class PassRegistry;
33
34namespace NVPTXCC {
43}
44
45FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
46 llvm::CodeGenOptLevel OptLevel);
52ModulePass *createNVVMReflectPass(unsigned int SmVersion);
61 bool NoTrapAfterNoreturn);
70
95
96// Module passes
97class GenericToNVVMPass : public RequiredPassInfoMixin<GenericToNVVMPass> {
98public:
100};
101
103 : public RequiredPassInfoMixin<NVPTXAssignValidGlobalNamesPass> {
104public:
106};
107
109 : public RequiredPassInfoMixin<NVPTXCtorDtorLoweringPass> {
110public:
112};
113
114class NVPTXLowerArgsPass : public RequiredPassInfoMixin<NVPTXLowerArgsPass> {
115 TargetMachine &TM;
116
117public:
120};
121
123 : public OptionalPassInfoMixin<NVPTXPromoteParamAlignPass> {
124public:
126};
127
128class NVVMReflectPass : public RequiredPassInfoMixin<NVVMReflectPass> {
129 unsigned SmVersion;
130
131public:
132 NVVMReflectPass() : SmVersion(0) {}
133 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
135};
136
137// Function passes
139 : public RequiredPassInfoMixin<NVPTXAllocaHoistingPass> {
140public:
142};
143
145 : public RequiredPassInfoMixin<NVPTXAtomicLowerPass> {
146public:
148};
149
151 : public OptionalPassInfoMixin<NVPTXCopyByValArgsPass> {
152public:
154};
155
157 : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
158public:
160};
161
162class NVPTXIRPeepholePass : public OptionalPassInfoMixin<NVPTXIRPeepholePass> {
163public:
165};
166
168 : public RequiredPassInfoMixin<NVPTXLowerAggrCopiesPass> {
169public:
171};
172
174 : public RequiredPassInfoMixin<NVPTXLowerAllocaPass> {
175public:
177};
178
180 : public OptionalPassInfoMixin<NVPTXLowerUnreachablePass> {
181 bool TrapUnreachable;
182 bool NoTrapAfterNoreturn;
183
184public:
185 NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
186 : TrapUnreachable(TrapUnreachable),
187 NoTrapAfterNoreturn(NoTrapAfterNoreturn) {}
189};
190
192 : public OptionalPassInfoMixin<NVPTXMarkKernelPtrsGlobalPass> {
193public:
195};
196
198 : public OptionalPassInfoMixin<NVPTXTagInvariantLoadsPass> {
199public:
201};
202
203class NVVMIntrRangePass : public OptionalPassInfoMixin<NVVMIntrRangePass> {
204public:
206};
207
208// Machine function passes
210 : public OptionalPassInfoMixin<NVPTXAddressFolderPass> {
211public:
214};
215
217 : public RequiredPassInfoMixin<NVPTXForwardParamsPass> {
218public:
221};
222
227
228class NVPTXPeepholePass : public OptionalPassInfoMixin<NVPTXPeepholePass> {
229public:
232};
233
235 : public RequiredPassInfoMixin<NVPTXPrologEpilogPass> {
236public:
239};
240
242 : public RequiredPassInfoMixin<NVPTXProxyRegErasurePass> {
243public:
246};
247
249 : public RequiredPassInfoMixin<NVPTXReplaceImageHandlesPass> {
250public:
253};
254
255namespace NVPTX {
260
261// A field inside TSFlags needs a shift and a mask. The usage is
262// always as follows :
263// ((TSFlags & fieldMask) >> fieldShift)
264// The enum keeps the mask, the shift, and all valid values of the
265// field in one place.
280
291
292// Extends LLVM AtomicOrdering with PTX Orderings:
293using OrderingUnderlyingType = unsigned int;
308
309using ScopeUnderlyingType = unsigned int;
312 Block = 1,
316 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
318};
319
320using AddressSpaceUnderlyingType = unsigned int;
329
330 // DeviceParam is not a real address space, as it does not support pointers
331 // and instead can only be referenced by param+offset. For this reason it is
332 // only used in MIR as an instruction modifier and should not be used in LLVM
333 // IR.
335};
336
337// Eviction and prefetch hint enums for !mem.cache_hint metadata. These
338// correspond to PTX L1::evict_*, L2::evict_*, and L2::*B qualifiers.
339
340// L1 Eviction Policy - maps to PTX L1::evict_* qualifiers
341enum class L1Eviction : uint8_t {
342 Normal = 0, // Default behavior (no qualifier)
343 Unchanged = 1, // L1::evict_unchanged
344 First = 2, // L1::evict_first
345 Last = 3, // L1::evict_last
346 NoAllocate = 4, // L1::no_allocate
347};
348
349// L2 Eviction Policy - maps to PTX L2::evict_* qualifiers
350enum class L2Eviction : uint8_t {
351 Normal = 0, // Default behavior (no qualifier)
352 First = 1, // L2::evict_first
353 Last = 2, // L2::evict_last
354};
355
356// L2 Prefetch Size - maps to PTX L2::*B qualifiers
357enum class L2Prefetch : uint8_t {
358 None = 0, // No prefetch hint
359 Bytes64 = 1, // L2::64B
360 Bytes128 = 2, // L2::128B
361 Bytes256 = 3, // L2::256B
362};
363
364// Bitfield layout for encoded eviction/prefetch hints (stored in unsigned):
365// Bits 0-2: L1 Eviction (3 bits, 5 values)
366// Bits 3-4: L2 Eviction (2 bits, 3 values)
367// Bits 5-6: L2 Prefetch (2 bits, 4 values)
368// Bit 7: L2::cache_hint mode flag (set when using CachePolicy)
369// Bits 8-31: Reserved
370//
371// Using llvm::Bitfield for type-safe access with compile-time validation.
378
380 L2Prefetch P) {
381 unsigned Hint = 0;
385 return Hint;
386}
387
388inline L1Eviction decodeL1Eviction(unsigned Hint) {
390}
391
392inline L2Eviction decodeL2Eviction(unsigned Hint) {
394}
395
396inline L2Prefetch decodeL2Prefetch(unsigned Hint) {
398}
399
400inline bool isL2CacheHintMode(unsigned Hint) {
402}
403
406} // namespace PTXLdStInstCode
407
408/// PTXCvtMode - Conversion code enumeration
430
431/// PTXCmpMode - Comparison mode enumeration
432namespace PTXCmpMode {
450}
451
463
464enum class DivPrecisionLevel : unsigned {
466 Full = 1,
469};
470
471} // namespace NVPTX
473} // namespace llvm
474
475// Defines symbolic names for NVPTX registers. This defines a mapping from
476// register name to register number.
477#define GET_REGINFO_ENUM
478#include "NVPTXGenRegisterInfo.inc"
479
480// Defines symbolic names for NVPTX instructions, MC helper declarations,
481// and named operand helpers generated from UseNamedOperandTable=1.
482#define GET_INSTRINFO_ENUM
483#define GET_INSTRINFO_MC_HELPER_DECLS
484#define GET_INSTRINFO_OPERAND_ENUM
485#include "NVPTXGenInstrInfo.inc"
486
487#define GET_SUBTARGETINFO_ENUM
488#include "NVPTXGenSubtargetInfo.inc"
489
490#endif
Atomic ordering constants.
This file implements methods to test, set and extract typed bits from packed unsigned integers.
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:54
NVPTX address space definition.
#define P(N)
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:314
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
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
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
NVPTXISelDAGToDAGPass(NVPTXTargetMachine &TM, CodeGenOptLevel OptLevel)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
NVPTXLowerArgsPass(TargetMachine &TM)
Definition NVPTX.h:118
NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
Definition NVPTX.h:185
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
NVVMReflectPass(unsigned SmVersion)
Definition NVPTX.h:133
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
SelectionDAGISelPass(std::unique_ptr< SelectionDAGISel > Selector)
Primary interface to the complete machine description for the target machine.
PTXCmpMode - Comparison mode enumeration.
Definition NVPTX.h:432
PTXCvtMode - Conversion code enumeration.
Definition NVPTX.h:409
unsigned int OrderingUnderlyingType
Definition NVPTX.h:293
@ DeviceParam
Definition NVPTX.h:334
@ SharedCluster
Definition NVPTX.h:327
@ EntryParam
Definition NVPTX.h:328
unsigned encodeEvictionAndPrefetchHint(L1Eviction L1, L2Eviction L2, L2Prefetch P)
Definition NVPTX.h:379
L2Prefetch decodeL2Prefetch(unsigned Hint)
Definition NVPTX.h:396
@ VecInstTypeShift
Definition NVPTX.h:267
@ VecExtract
Definition NVPTX.h:275
@ VecInsert
Definition NVPTX.h:276
@ VecShuffle
Definition NVPTX.h:274
@ VecInstTypeMask
Definition NVPTX.h:268
Bitfield::Element< L2Eviction, 3, 2, L2Eviction::Last > L2EvictionBits
Definition NVPTX.h:374
unsigned int ScopeUnderlyingType
Definition NVPTX.h:309
L1Eviction decodeL1Eviction(unsigned Hint)
Definition NVPTX.h:388
L2Eviction decodeL2Eviction(unsigned Hint)
Definition NVPTX.h:392
DivPrecisionLevel
Definition NVPTX.h:464
bool isL2CacheHintMode(unsigned Hint)
Definition NVPTX.h:400
@ DefaultDevice
Definition NVPTX.h:316
@ LASTSCOPE
Definition NVPTX.h:317
Bitfield::Element< L1Eviction, 0, 3, L1Eviction::NoAllocate > L1EvictionBits
Definition NVPTX.h:372
Bitfield::Element< bool, 7, 1 > L2CacheHintBit
Definition NVPTX.h:377
@ RelaxedMMIO
Definition NVPTX.h:306
@ AcquireRelease
Definition NVPTX.h:302
@ NotAtomic
Definition NVPTX.h:295
@ SequentiallyConsistent
Definition NVPTX.h:303
@ isStoreShift
Definition NVPTX.h:289
@ isLoadShift
Definition NVPTX.h:287
@ isLoadMask
Definition NVPTX.h:286
@ isStoreMask
Definition NVPTX.h:288
@ SimpleMoveShift
Definition NVPTX.h:283
@ SimpleMoveMask
Definition NVPTX.h:282
unsigned int AddressSpaceUnderlyingType
Definition NVPTX.h:320
Bitfield::Element< L2Prefetch, 5, 2, L2Prefetch::Bytes256 > L2PrefetchBits
Definition NVPTX.h:375
This is an optimization pass for GlobalISel generic memory operations.
FunctionPass * createNVPTXLowerUnreachableLegacyPass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
FunctionPass * createNVPTXIRPeepholePass()
FunctionPass * createNVPTXAtomicLowerLegacyPass()
FunctionPass * createNVPTXImageOptimizerLegacyPass()
void initializeNVPTXLowerUnreachableLegacyPassPass(PassRegistry &)
ModulePass * createGenericToNVVMLegacyPass()
void initializeNVPTXExternalAAWrapperPass(PassRegistry &)
void initializeNVPTXPeepholeLegacyPassPass(PassRegistry &)
void initializeNVPTXPrologEpilogLegacyPassPass(PassRegistry &)
void initializeNVPTXLowerArgsLegacyPassPass(PassRegistry &)
MachineFunctionPass * createNVPTXReplaceImageHandlesLegacyPass()
void initializeNVPTXForwardParamsLegacyPassPass(PassRegistry &)
FunctionPass * createNVPTXLowerAggrCopiesLegacyPass()
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
void initializeNVVMReflectPass(PassRegistry &)
ModulePass * createNVPTXAssignValidGlobalNamesLegacyPass()
void initializeNVPTXAssignValidGlobalNamesLegacyPassPass(PassRegistry &)
FunctionPass * createNVPTXISelDag(NVPTXTargetMachine &TM, llvm::CodeGenOptLevel OptLevel)
createNVPTXISelDag - This pass converts a legalized DAG into a NVPTX-specific DAG,...
MachineFunctionPass * createNVPTXAddressFolderLegacyPass()
void initializeNVPTXLowerAllocaLegacyPassPass(PassRegistry &)
void initializeGenericToNVVMLegacyPassPass(PassRegistry &)
void initializeNVPTXCtorDtorLoweringLegacyPass(PassRegistry &)
MachineFunctionPass * createNVPTXForwardParamsLegacyPass()
FunctionPass * createNVPTXTagInvariantLoadsPass()
void initializeNVVMReflectLegacyPassPass(PassRegistry &)
void initializeNVPTXAddressFolderLegacyPassPass(PassRegistry &)
void initializeNVPTXAAWrapperPassPass(PassRegistry &)
void initializeNVPTXIRPeepholePass(PassRegistry &)
ModulePass * createNVPTXLowerArgsPass()
FunctionPass * createNVPTXMarkKernelPtrsGlobalPass()
void initializeNVVMIntrRangePass(PassRegistry &)
MachineFunctionPass * createNVPTXPrologEpilogLegacyPass()
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:149
void initializeNVPTXLowerAggrCopiesLegacyPassPass(PassRegistry &)
ModulePass * createNVPTXPromoteParamAlignPass()
void initializeNVPTXAsmPrinterPass(PassRegistry &)
void initializeNVPTXProxyRegErasureLegacyPassPass(PassRegistry &)
void initializeNVPTXTagInvariantLoadLegacyPassPass(PassRegistry &)
void initializeNVPTXAtomicLowerLegacyPassPass(PassRegistry &)
MachineFunctionPass * createNVPTXPeepholeLegacyPass()
FunctionPass * createNVPTXLowerAllocaLegacyPass()
ModulePass * createNVPTXCtorDtorLoweringLegacyPass()
void initializeNVPTXMarkKernelPtrsGlobalLegacyPassPass(PassRegistry &)
void initializeNVPTXAllocaHoistingLegacyPassPass(PassRegistry &)
FunctionPass * createNVPTXAllocaHoistingLegacyPass()
ModulePass * createNVVMReflectPass(unsigned int SmVersion)
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
void initializeNVPTXPromoteParamAlignLegacyPassPass(PassRegistry &)
FunctionPass * createNVVMIntrRangePass()
MachineFunctionPass * createNVPTXProxyRegErasureLegacyPass()
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
void initializeNVPTXDAGToDAGISelLegacyPass(PassRegistry &)
Describes an element of a Bitfield.
Definition Bitfields.h:176
static Bitfield::Type get(StorageType Packed)
Unpacks the field from the Packed value.
Definition Bitfields.h:207
static void set(StorageType &Packed, typename Bitfield::Type Value)
Sets the typed value in the provided Packed value.
Definition Bitfields.h:223
A CRTP mix-in for passes that can be skipped.
A CRTP mix-in for passes that should not be skipped.