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 {
28class FunctionPass;
31class PassRegistry;
32
33namespace NVPTXCC {
42}
43
44FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
45 llvm::CodeGenOptLevel OptLevel);
51ModulePass *createNVVMReflectPass(unsigned int SmVersion);
60 bool NoTrapAfterNoreturn);
69
94
95// Module passes
96class GenericToNVVMPass : public OptionalPassInfoMixin<GenericToNVVMPass> {
97public:
99};
100
102 : public RequiredPassInfoMixin<NVPTXAssignValidGlobalNamesPass> {
103public:
105};
106
107class NVPTXLowerArgsPass : public OptionalPassInfoMixin<NVPTXLowerArgsPass> {
108 TargetMachine &TM;
109
110public:
113};
114
116 : public OptionalPassInfoMixin<NVPTXPromoteParamAlignPass> {
117public:
119};
120
121class NVVMReflectPass : public OptionalPassInfoMixin<NVVMReflectPass> {
122 unsigned SmVersion;
123
124public:
125 NVVMReflectPass() : SmVersion(0) {}
126 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
128};
129
130// Function passes
132 : public RequiredPassInfoMixin<NVPTXAllocaHoistingPass> {
133public:
135};
136
138 : public RequiredPassInfoMixin<NVPTXAtomicLowerPass> {
139public:
141};
142
144 : public OptionalPassInfoMixin<NVPTXCopyByValArgsPass> {
145public:
147};
148
150 : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
151public:
153};
154
155class NVPTXIRPeepholePass : public OptionalPassInfoMixin<NVPTXIRPeepholePass> {
156public:
158};
159
161 : public RequiredPassInfoMixin<NVPTXLowerAggrCopiesPass> {
162public:
164};
165
167 : public RequiredPassInfoMixin<NVPTXLowerAllocaPass> {
168public:
170};
171
173 : public OptionalPassInfoMixin<NVPTXLowerUnreachablePass> {
174 bool TrapUnreachable;
175 bool NoTrapAfterNoreturn;
176
177public:
178 NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
179 : TrapUnreachable(TrapUnreachable),
180 NoTrapAfterNoreturn(NoTrapAfterNoreturn) {}
182};
183
185 : public OptionalPassInfoMixin<NVPTXMarkKernelPtrsGlobalPass> {
186public:
188};
189
191 : public OptionalPassInfoMixin<NVPTXTagInvariantLoadsPass> {
192public:
194};
195
196class NVVMIntrRangePass : public OptionalPassInfoMixin<NVVMIntrRangePass> {
197public:
199};
200
201// Machine function passes
203 : public OptionalPassInfoMixin<NVPTXAddressFolderPass> {
204public:
207};
208
210 : public RequiredPassInfoMixin<NVPTXForwardParamsPass> {
211public:
214};
215
220
221class NVPTXPeepholePass : public OptionalPassInfoMixin<NVPTXPeepholePass> {
222public:
225};
226
228 : public RequiredPassInfoMixin<NVPTXPrologEpilogPass> {
229public:
232};
233
235 : public RequiredPassInfoMixin<NVPTXProxyRegErasurePass> {
236public:
239};
240
242 : public RequiredPassInfoMixin<NVPTXReplaceImageHandlesPass> {
243public:
246};
247
248namespace NVPTX {
253
254// A field inside TSFlags needs a shift and a mask. The usage is
255// always as follows :
256// ((TSFlags & fieldMask) >> fieldShift)
257// The enum keeps the mask, the shift, and all valid values of the
258// field in one place.
273
284
285// Extends LLVM AtomicOrdering with PTX Orderings:
286using OrderingUnderlyingType = unsigned int;
301
302using ScopeUnderlyingType = unsigned int;
305 Block = 1,
309 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
311};
312
313using AddressSpaceUnderlyingType = unsigned int;
322
323 // DeviceParam is not a real address space, as it does not support pointers
324 // and instead can only be referenced by param+offset. For this reason it is
325 // only used in MIR as an instruction modifier and should not be used in LLVM
326 // IR.
328};
329
330// Eviction and prefetch hint enums for !mem.cache_hint metadata. These
331// correspond to PTX L1::evict_*, L2::evict_*, and L2::*B qualifiers.
332
333// L1 Eviction Policy - maps to PTX L1::evict_* qualifiers
334enum class L1Eviction : uint8_t {
335 Normal = 0, // Default behavior (no qualifier)
336 Unchanged = 1, // L1::evict_unchanged
337 First = 2, // L1::evict_first
338 Last = 3, // L1::evict_last
339 NoAllocate = 4, // L1::no_allocate
340};
341
342// L2 Eviction Policy - maps to PTX L2::evict_* qualifiers
343enum class L2Eviction : uint8_t {
344 Normal = 0, // Default behavior (no qualifier)
345 First = 1, // L2::evict_first
346 Last = 2, // L2::evict_last
347};
348
349// L2 Prefetch Size - maps to PTX L2::*B qualifiers
350enum class L2Prefetch : uint8_t {
351 None = 0, // No prefetch hint
352 Bytes64 = 1, // L2::64B
353 Bytes128 = 2, // L2::128B
354 Bytes256 = 3, // L2::256B
355};
356
357// Bitfield layout for encoded eviction/prefetch hints (stored in unsigned):
358// Bits 0-2: L1 Eviction (3 bits, 5 values)
359// Bits 3-4: L2 Eviction (2 bits, 3 values)
360// Bits 5-6: L2 Prefetch (2 bits, 4 values)
361// Bit 7: L2::cache_hint mode flag (set when using CachePolicy)
362// Bits 8-31: Reserved
363//
364// Using llvm::Bitfield for type-safe access with compile-time validation.
371
373 L2Prefetch P) {
374 unsigned Hint = 0;
378 return Hint;
379}
380
381inline L1Eviction decodeL1Eviction(unsigned Hint) {
383}
384
385inline L2Eviction decodeL2Eviction(unsigned Hint) {
387}
388
389inline L2Prefetch decodeL2Prefetch(unsigned Hint) {
391}
392
393inline bool isL2CacheHintMode(unsigned Hint) {
395}
396
399} // namespace PTXLdStInstCode
400
401/// PTXCvtMode - Conversion code enumeration
423
424/// PTXCmpMode - Comparison mode enumeration
425namespace PTXCmpMode {
443}
444
456
457enum class DivPrecisionLevel : unsigned {
459 Full = 1,
462};
463
464} // namespace NVPTX
466} // namespace llvm
467
468// Defines symbolic names for NVPTX registers. This defines a mapping from
469// register name to register number.
470#define GET_REGINFO_ENUM
471#include "NVPTXGenRegisterInfo.inc"
472
473// Defines symbolic names for NVPTX instructions, MC helper declarations,
474// and named operand helpers generated from UseNamedOperandTable=1.
475#define GET_INSTRINFO_ENUM
476#define GET_INSTRINFO_MC_HELPER_DECLS
477#define GET_INSTRINFO_OPERAND_ENUM
478#include "NVPTXGenInstrInfo.inc"
479
480#define GET_SUBTARGETINFO_ENUM
481#include "NVPTXGenSubtargetInfo.inc"
482
483#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(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:111
NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
Definition NVPTX.h:178
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:126
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:425
PTXCvtMode - Conversion code enumeration.
Definition NVPTX.h:402
unsigned int OrderingUnderlyingType
Definition NVPTX.h:286
@ DeviceParam
Definition NVPTX.h:327
@ SharedCluster
Definition NVPTX.h:320
@ EntryParam
Definition NVPTX.h:321
unsigned encodeEvictionAndPrefetchHint(L1Eviction L1, L2Eviction L2, L2Prefetch P)
Definition NVPTX.h:372
L2Prefetch decodeL2Prefetch(unsigned Hint)
Definition NVPTX.h:389
@ VecInstTypeShift
Definition NVPTX.h:260
@ VecExtract
Definition NVPTX.h:268
@ VecInsert
Definition NVPTX.h:269
@ VecShuffle
Definition NVPTX.h:267
@ VecInstTypeMask
Definition NVPTX.h:261
Bitfield::Element< L2Eviction, 3, 2, L2Eviction::Last > L2EvictionBits
Definition NVPTX.h:367
unsigned int ScopeUnderlyingType
Definition NVPTX.h:302
L1Eviction decodeL1Eviction(unsigned Hint)
Definition NVPTX.h:381
L2Eviction decodeL2Eviction(unsigned Hint)
Definition NVPTX.h:385
DivPrecisionLevel
Definition NVPTX.h:457
bool isL2CacheHintMode(unsigned Hint)
Definition NVPTX.h:393
@ DefaultDevice
Definition NVPTX.h:309
@ LASTSCOPE
Definition NVPTX.h:310
Bitfield::Element< L1Eviction, 0, 3, L1Eviction::NoAllocate > L1EvictionBits
Definition NVPTX.h:365
Bitfield::Element< bool, 7, 1 > L2CacheHintBit
Definition NVPTX.h:370
@ RelaxedMMIO
Definition NVPTX.h:299
@ AcquireRelease
Definition NVPTX.h:295
@ NotAtomic
Definition NVPTX.h:288
@ SequentiallyConsistent
Definition NVPTX.h:296
@ isStoreShift
Definition NVPTX.h:282
@ isLoadShift
Definition NVPTX.h:280
@ isLoadMask
Definition NVPTX.h:279
@ isStoreMask
Definition NVPTX.h:281
@ SimpleMoveShift
Definition NVPTX.h:276
@ SimpleMoveMask
Definition NVPTX.h:275
unsigned int AddressSpaceUnderlyingType
Definition NVPTX.h:313
Bitfield::Element< L2Prefetch, 5, 2, L2Prefetch::Bytes256 > L2PrefetchBits
Definition NVPTX.h:368
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.