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);
50ModulePass *createNVVMReflectPass(unsigned int SmVersion);
58 bool NoTrapAfterNoreturn);
66
91
95
99
100struct NVVMReflectPass : OptionalPassInfoMixin<NVVMReflectPass> {
101 NVVMReflectPass() : SmVersion(0) {}
102 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
104
105private:
106 unsigned SmVersion;
107};
108
112
116
118 : OptionalPassInfoMixin<NVPTXPromoteParamAlignPass> {
120};
121
122struct NVPTXLowerArgsPass : OptionalPassInfoMixin<NVPTXLowerArgsPass> {
123private:
124 TargetMachine &TM;
125
126public:
129};
130
132 : OptionalPassInfoMixin<NVPTXMarkKernelPtrsGlobalPass> {
134};
135
140
145
146namespace NVPTX {
151
152// A field inside TSFlags needs a shift and a mask. The usage is
153// always as follows :
154// ((TSFlags & fieldMask) >> fieldShift)
155// The enum keeps the mask, the shift, and all valid values of the
156// field in one place.
171
182
183// Extends LLVM AtomicOrdering with PTX Orderings:
184using OrderingUnderlyingType = unsigned int;
199
200using ScopeUnderlyingType = unsigned int;
203 Block = 1,
207 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
209};
210
211using AddressSpaceUnderlyingType = unsigned int;
220
221 // DeviceParam is not a real address space, as it does not support pointers
222 // and instead can only be referenced by param+offset. For this reason it is
223 // only used in MIR as an instruction modifier and should not be used in LLVM
224 // IR.
226};
227
228// Eviction and prefetch hint enums for !mem.cache_hint metadata. These
229// correspond to PTX L1::evict_*, L2::evict_*, and L2::*B qualifiers.
230
231// L1 Eviction Policy - maps to PTX L1::evict_* qualifiers
232enum class L1Eviction : uint8_t {
233 Normal = 0, // Default behavior (no qualifier)
234 Unchanged = 1, // L1::evict_unchanged
235 First = 2, // L1::evict_first
236 Last = 3, // L1::evict_last
237 NoAllocate = 4, // L1::no_allocate
238};
239
240// L2 Eviction Policy - maps to PTX L2::evict_* qualifiers
241enum class L2Eviction : uint8_t {
242 Normal = 0, // Default behavior (no qualifier)
243 First = 1, // L2::evict_first
244 Last = 2, // L2::evict_last
245};
246
247// L2 Prefetch Size - maps to PTX L2::*B qualifiers
248enum class L2Prefetch : uint8_t {
249 None = 0, // No prefetch hint
250 Bytes64 = 1, // L2::64B
251 Bytes128 = 2, // L2::128B
252 Bytes256 = 3, // L2::256B
253};
254
255// Bitfield layout for encoded eviction/prefetch hints (stored in unsigned):
256// Bits 0-2: L1 Eviction (3 bits, 5 values)
257// Bits 3-4: L2 Eviction (2 bits, 3 values)
258// Bits 5-6: L2 Prefetch (2 bits, 4 values)
259// Bit 7: L2::cache_hint mode flag (set when using CachePolicy)
260// Bits 8-31: Reserved
261//
262// Using llvm::Bitfield for type-safe access with compile-time validation.
269
271 L2Prefetch P) {
272 unsigned Hint = 0;
276 return Hint;
277}
278
279inline L1Eviction decodeL1Eviction(unsigned Hint) {
281}
282
283inline L2Eviction decodeL2Eviction(unsigned Hint) {
285}
286
287inline L2Prefetch decodeL2Prefetch(unsigned Hint) {
289}
290
291inline bool isL2CacheHintMode(unsigned Hint) {
293}
294
297} // namespace PTXLdStInstCode
298
299/// PTXCvtMode - Conversion code enumeration
321
322/// PTXCmpMode - Comparison mode enumeration
323namespace PTXCmpMode {
341}
342
354
355enum class DivPrecisionLevel : unsigned {
357 Full = 1,
360};
361
362} // namespace NVPTX
364} // namespace llvm
365
366// Defines symbolic names for NVPTX registers. This defines a mapping from
367// register name to register number.
368#define GET_REGINFO_ENUM
369#include "NVPTXGenRegisterInfo.inc"
370
371// Defines symbolic names for NVPTX instructions, MC helper declarations,
372// and named operand helpers generated from UseNamedOperandTable=1.
373#define GET_INSTRINFO_ENUM
374#define GET_INSTRINFO_MC_HELPER_DECLS
375#define GET_INSTRINFO_OPERAND_ENUM
376#include "NVPTXGenInstrInfo.inc"
377
378#define GET_SUBTARGETINFO_ENUM
379#include "NVPTXGenSubtargetInfo.inc"
380
381#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)
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
NVPTXISelDAGToDAGPass(NVPTXTargetMachine &TM, CodeGenOptLevel OptLevel)
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:323
PTXCvtMode - Conversion code enumeration.
Definition NVPTX.h:300
unsigned int OrderingUnderlyingType
Definition NVPTX.h:184
@ DeviceParam
Definition NVPTX.h:225
@ SharedCluster
Definition NVPTX.h:218
@ EntryParam
Definition NVPTX.h:219
unsigned encodeEvictionAndPrefetchHint(L1Eviction L1, L2Eviction L2, L2Prefetch P)
Definition NVPTX.h:270
L2Prefetch decodeL2Prefetch(unsigned Hint)
Definition NVPTX.h:287
@ VecInstTypeShift
Definition NVPTX.h:158
@ VecExtract
Definition NVPTX.h:166
@ VecInsert
Definition NVPTX.h:167
@ VecShuffle
Definition NVPTX.h:165
@ VecInstTypeMask
Definition NVPTX.h:159
Bitfield::Element< L2Eviction, 3, 2, L2Eviction::Last > L2EvictionBits
Definition NVPTX.h:265
unsigned int ScopeUnderlyingType
Definition NVPTX.h:200
L1Eviction decodeL1Eviction(unsigned Hint)
Definition NVPTX.h:279
L2Eviction decodeL2Eviction(unsigned Hint)
Definition NVPTX.h:283
DivPrecisionLevel
Definition NVPTX.h:355
bool isL2CacheHintMode(unsigned Hint)
Definition NVPTX.h:291
@ DefaultDevice
Definition NVPTX.h:207
@ LASTSCOPE
Definition NVPTX.h:208
Bitfield::Element< L1Eviction, 0, 3, L1Eviction::NoAllocate > L1EvictionBits
Definition NVPTX.h:263
Bitfield::Element< bool, 7, 1 > L2CacheHintBit
Definition NVPTX.h:268
@ RelaxedMMIO
Definition NVPTX.h:197
@ AcquireRelease
Definition NVPTX.h:193
@ NotAtomic
Definition NVPTX.h:186
@ SequentiallyConsistent
Definition NVPTX.h:194
@ isStoreShift
Definition NVPTX.h:180
@ isLoadShift
Definition NVPTX.h:178
@ isLoadMask
Definition NVPTX.h:177
@ isStoreMask
Definition NVPTX.h:179
@ SimpleMoveShift
Definition NVPTX.h:174
@ SimpleMoveMask
Definition NVPTX.h:173
unsigned int AddressSpaceUnderlyingType
Definition NVPTX.h:211
Bitfield::Element< L2Prefetch, 5, 2, L2Prefetch::Bytes256 > L2PrefetchBits
Definition NVPTX.h:266
This is an optimization pass for GlobalISel generic memory operations.
void initializeNVPTXLowerAllocaPass(PassRegistry &)
FunctionPass * createNVPTXIRPeepholePass()
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()
MachineFunctionPass * createNVPTXAddressFolderPass()
void initializeNVVMReflectLegacyPassPass(PassRegistry &)
void initializeNVPTXAAWrapperPassPass(PassRegistry &)
FunctionPass * createNVPTXImageOptimizerPass()
FunctionPass * createNVPTXLowerAllocaPass()
void initializeNVPTXIRPeepholePass(PassRegistry &)
ModulePass * createNVPTXLowerArgsPass()
MachineFunctionPass * createNVPTXForwardParamsPass()
FunctionPass * createNVPTXMarkKernelPtrsGlobalPass()
void initializeNVVMIntrRangePass(PassRegistry &)
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:149
ModulePass * createNVPTXPromoteParamAlignPass()
void initializeNVPTXAsmPrinterPass(PassRegistry &)
void initializeNVPTXTagInvariantLoadLegacyPassPass(PassRegistry &)
ModulePass * createNVPTXCtorDtorLoweringLegacyPass()
void initializeNVPTXMarkKernelPtrsGlobalLegacyPassPass(PassRegistry &)
void initializeNVPTXAllocaHoistingPass(PassRegistry &)
void initializeNVPTXProxyRegErasurePass(PassRegistry &)
void initializeNVPTXAddressFolderPassPass(PassRegistry &)
ModulePass * createNVVMReflectPass(unsigned int SmVersion)
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
void initializeNVPTXPromoteParamAlignLegacyPassPass(PassRegistry &)
FunctionPass * createNVVMIntrRangePass()
void initializeNVPTXAtomicLowerPass(PassRegistry &)
void initializeNVPTXForwardParamsPassPass(PassRegistry &)
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
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
NVPTXLowerArgsPass(TargetMachine &TM)
Definition NVPTX.h:127
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
PreservedAnalyses run(Module &F, ModuleAnalysisManager &AM)
NVVMReflectPass(unsigned SmVersion)
Definition NVPTX.h:102
A CRTP mix-in for passes that can be skipped.