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
94
95// Module passes
96class GenericToNVVMPass : public RequiredPassInfoMixin<GenericToNVVMPass> {
97public:
99};
100
102 : public RequiredPassInfoMixin<NVPTXAssignValidGlobalNamesPass> {
103public:
105};
106
108 : public RequiredPassInfoMixin<NVPTXCtorDtorLoweringPass> {
109public:
111};
112
113class NVPTXLowerArgsPass : public RequiredPassInfoMixin<NVPTXLowerArgsPass> {
114 TargetMachine &TM;
115
116public:
119};
120
122 : public OptionalPassInfoMixin<NVPTXPromoteParamAlignPass> {
123public:
125};
126
127class NVVMReflectPass : public RequiredPassInfoMixin<NVVMReflectPass> {
128 unsigned SmVersion;
129
130public:
131 NVVMReflectPass() : SmVersion(0) {}
132 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
134};
135
136// Function passes
138 : public RequiredPassInfoMixin<NVPTXAllocaHoistingPass> {
139public:
141};
142
144 : public RequiredPassInfoMixin<NVPTXAtomicLowerPass> {
145public:
147};
148
150 : public OptionalPassInfoMixin<NVPTXCopyByValArgsPass> {
151public:
153};
154
156 : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
157public:
159};
160
161class NVPTXIRPeepholePass : public OptionalPassInfoMixin<NVPTXIRPeepholePass> {
162public:
164};
165
167 : public RequiredPassInfoMixin<NVPTXLowerAggrCopiesPass> {
168public:
170};
171
173 : public RequiredPassInfoMixin<NVPTXLowerAllocaPass> {
174public:
176};
177
179 : public OptionalPassInfoMixin<NVPTXLowerUnreachablePass> {
180 bool TrapUnreachable;
181 bool NoTrapAfterNoreturn;
182
183public:
184 NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
185 : TrapUnreachable(TrapUnreachable),
186 NoTrapAfterNoreturn(NoTrapAfterNoreturn) {}
188};
189
191 : public OptionalPassInfoMixin<NVPTXMarkKernelPtrsGlobalPass> {
192public:
194};
195
197 : public OptionalPassInfoMixin<NVPTXTagInvariantLoadsPass> {
198public:
200};
201
202class NVVMIntrRangePass : public OptionalPassInfoMixin<NVVMIntrRangePass> {
203public:
205};
206
207// Machine function passes
209 : public OptionalPassInfoMixin<NVPTXAddressFolderPass> {
210public:
213};
214
216 : public RequiredPassInfoMixin<NVPTXForwardParamsPass> {
217public:
220};
221
226
227class NVPTXPeepholePass : public OptionalPassInfoMixin<NVPTXPeepholePass> {
228public:
231};
232
234 : public RequiredPassInfoMixin<NVPTXPrologEpilogPass> {
235public:
238};
239
241 : public RequiredPassInfoMixin<NVPTXProxyRegErasurePass> {
242public:
245};
246
248 : public RequiredPassInfoMixin<NVPTXReplaceImageHandlesPass> {
249public:
252};
253
254namespace NVPTX {
259
260// A field inside TSFlags needs a shift and a mask. The usage is
261// always as follows :
262// ((TSFlags & fieldMask) >> fieldShift)
263// The enum keeps the mask, the shift, and all valid values of the
264// field in one place.
279
290
291// Extends LLVM AtomicOrdering with PTX Orderings:
292using OrderingUnderlyingType = unsigned int;
307
308using ScopeUnderlyingType = unsigned int;
311 Block = 1,
315 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
317};
318
319using AddressSpaceUnderlyingType = unsigned int;
328
329 // DeviceParam is not a real address space, as it does not support pointers
330 // and instead can only be referenced by param+offset. For this reason it is
331 // only used in MIR as an instruction modifier and should not be used in LLVM
332 // IR.
334};
335
336// Eviction and prefetch hint enums for !mem.cache_hint metadata. These
337// correspond to PTX L1::evict_*, L2::evict_*, and L2::*B qualifiers.
338
339// L1 Eviction Policy - maps to PTX L1::evict_* qualifiers
340enum class L1Eviction : uint8_t {
341 Normal = 0, // Default behavior (no qualifier)
342 Unchanged = 1, // L1::evict_unchanged
343 First = 2, // L1::evict_first
344 Last = 3, // L1::evict_last
345 NoAllocate = 4, // L1::no_allocate
346};
347
348// L2 Eviction Policy - maps to PTX L2::evict_* qualifiers
349enum class L2Eviction : uint8_t {
350 Normal = 0, // Default behavior (no qualifier)
351 First = 1, // L2::evict_first
352 Last = 2, // L2::evict_last
353};
354
355// L2 Prefetch Size - maps to PTX L2::*B qualifiers
356enum class L2Prefetch : uint8_t {
357 None = 0, // No prefetch hint
358 Bytes64 = 1, // L2::64B
359 Bytes128 = 2, // L2::128B
360 Bytes256 = 3, // L2::256B
361};
362
363// Bitfield layout for encoded eviction/prefetch hints (stored in unsigned):
364// Bits 0-2: L1 Eviction (3 bits, 5 values)
365// Bits 3-4: L2 Eviction (2 bits, 3 values)
366// Bits 5-6: L2 Prefetch (2 bits, 4 values)
367// Bit 7: L2::cache_hint mode flag (set when using CachePolicy)
368// Bits 8-31: Reserved
369//
370// Using llvm::Bitfield for type-safe access with compile-time validation.
377
379 L2Prefetch P) {
380 unsigned Hint = 0;
384 return Hint;
385}
386
387inline L1Eviction decodeL1Eviction(unsigned Hint) {
389}
390
391inline L2Eviction decodeL2Eviction(unsigned Hint) {
393}
394
395inline L2Prefetch decodeL2Prefetch(unsigned Hint) {
397}
398
399inline bool isL2CacheHintMode(unsigned Hint) {
401}
402
405} // namespace PTXLdStInstCode
406
407/// 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:68
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:117
NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
Definition NVPTX.h:184
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:132
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:408
unsigned int OrderingUnderlyingType
Definition NVPTX.h:292
@ DeviceParam
Definition NVPTX.h:333
@ SharedCluster
Definition NVPTX.h:326
@ EntryParam
Definition NVPTX.h:327
unsigned encodeEvictionAndPrefetchHint(L1Eviction L1, L2Eviction L2, L2Prefetch P)
Definition NVPTX.h:378
L2Prefetch decodeL2Prefetch(unsigned Hint)
Definition NVPTX.h:395
@ VecInstTypeShift
Definition NVPTX.h:266
@ VecExtract
Definition NVPTX.h:274
@ VecInsert
Definition NVPTX.h:275
@ VecShuffle
Definition NVPTX.h:273
@ VecInstTypeMask
Definition NVPTX.h:267
Bitfield::Element< L2Eviction, 3, 2, L2Eviction::Last > L2EvictionBits
Definition NVPTX.h:373
unsigned int ScopeUnderlyingType
Definition NVPTX.h:308
L1Eviction decodeL1Eviction(unsigned Hint)
Definition NVPTX.h:387
L2Eviction decodeL2Eviction(unsigned Hint)
Definition NVPTX.h:391
DivPrecisionLevel
Definition NVPTX.h:464
bool isL2CacheHintMode(unsigned Hint)
Definition NVPTX.h:399
@ DefaultDevice
Definition NVPTX.h:315
@ LASTSCOPE
Definition NVPTX.h:316
Bitfield::Element< L1Eviction, 0, 3, L1Eviction::NoAllocate > L1EvictionBits
Definition NVPTX.h:371
Bitfield::Element< bool, 7, 1 > L2CacheHintBit
Definition NVPTX.h:376
@ RelaxedMMIO
Definition NVPTX.h:305
@ AcquireRelease
Definition NVPTX.h:301
@ NotAtomic
Definition NVPTX.h:294
@ SequentiallyConsistent
Definition NVPTX.h:302
@ isStoreShift
Definition NVPTX.h:288
@ isLoadShift
Definition NVPTX.h:286
@ isLoadMask
Definition NVPTX.h:285
@ isStoreMask
Definition NVPTX.h:287
@ SimpleMoveShift
Definition NVPTX.h:282
@ SimpleMoveMask
Definition NVPTX.h:281
unsigned int AddressSpaceUnderlyingType
Definition NVPTX.h:319
Bitfield::Element< L2Prefetch, 5, 2, L2Prefetch::Bytes256 > L2PrefetchBits
Definition NVPTX.h:374
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
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:227
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.