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);
53ModulePass *createNVVMReflectPass(unsigned int SmVersion);
62 bool NoTrapAfterNoreturn);
71
96
97// Module passes
98class GenericToNVVMPass : public RequiredPassInfoMixin<GenericToNVVMPass> {
99public:
101};
102
104 : public RequiredPassInfoMixin<NVPTXAssignValidGlobalNamesPass> {
105public:
107};
108
110 : public RequiredPassInfoMixin<NVPTXCanonicalizeDynamicSharedPass> {
111public:
113};
114
116 : public RequiredPassInfoMixin<NVPTXCtorDtorLoweringPass> {
117public:
119};
120
121class NVPTXLowerArgsPass : public RequiredPassInfoMixin<NVPTXLowerArgsPass> {
122 TargetMachine &TM;
123
124public:
127};
128
130 : public OptionalPassInfoMixin<NVPTXPromoteParamAlignPass> {
131public:
133};
134
135class NVVMReflectPass : public RequiredPassInfoMixin<NVVMReflectPass> {
136 unsigned SmVersion;
137
138public:
139 NVVMReflectPass() : SmVersion(0) {}
140 NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
142};
143
144// Function passes
146 : public RequiredPassInfoMixin<NVPTXAllocaHoistingPass> {
147public:
149};
150
152 : public RequiredPassInfoMixin<NVPTXAtomicLowerPass> {
153public:
155};
156
158 : public OptionalPassInfoMixin<NVPTXCopyByValArgsPass> {
159public:
161};
162
164 : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
165public:
167};
168
169class NVPTXIRPeepholePass : public OptionalPassInfoMixin<NVPTXIRPeepholePass> {
170public:
172};
173
175 : public RequiredPassInfoMixin<NVPTXLowerAggrCopiesPass> {
176public:
178};
179
181 : public RequiredPassInfoMixin<NVPTXLowerAllocaPass> {
182public:
184};
185
187 : public OptionalPassInfoMixin<NVPTXLowerUnreachablePass> {
188 bool TrapUnreachable;
189 bool NoTrapAfterNoreturn;
190
191public:
192 NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
193 : TrapUnreachable(TrapUnreachable),
194 NoTrapAfterNoreturn(NoTrapAfterNoreturn) {}
196};
197
199 : public OptionalPassInfoMixin<NVPTXMarkKernelPtrsGlobalPass> {
200public:
202};
203
205 : public OptionalPassInfoMixin<NVPTXTagInvariantLoadsPass> {
206public:
208};
209
210class NVVMIntrRangePass : public OptionalPassInfoMixin<NVVMIntrRangePass> {
211public:
213};
214
215// Machine function passes
217 : public OptionalPassInfoMixin<NVPTXAddressFolderPass> {
218public:
221};
222
224 : public RequiredPassInfoMixin<NVPTXForwardParamsPass> {
225public:
228};
229
234
235class NVPTXPeepholePass : public OptionalPassInfoMixin<NVPTXPeepholePass> {
236public:
239};
240
242 : public RequiredPassInfoMixin<NVPTXPrologEpilogPass> {
243public:
246};
247
249 : public RequiredPassInfoMixin<NVPTXProxyRegErasurePass> {
250public:
253};
254
256 : public RequiredPassInfoMixin<NVPTXReplaceImageHandlesPass> {
257public:
260};
261
262namespace NVPTX {
267
268// A field inside TSFlags needs a shift and a mask. The usage is
269// always as follows :
270// ((TSFlags & fieldMask) >> fieldShift)
271// The enum keeps the mask, the shift, and all valid values of the
272// field in one place.
287
298
299// Extends LLVM AtomicOrdering with PTX Orderings:
300using OrderingUnderlyingType = unsigned int;
315
316using ScopeUnderlyingType = unsigned int;
319 Block = 1,
323 DefaultDevice = 5, // For SM < 70: denotes PTX op implicit/default .gpu scope
325};
326
327using AddressSpaceUnderlyingType = unsigned int;
336
337 // DeviceParam is not a real address space, as it does not support pointers
338 // and instead can only be referenced by param+offset. For this reason it is
339 // only used in MIR as an instruction modifier and should not be used in LLVM
340 // IR.
342};
343
344// Eviction and prefetch hint enums for !mem.cache_hint metadata. These
345// correspond to PTX L1::evict_*, L2::evict_*, and L2::*B qualifiers.
346
347// L1 Eviction Policy - maps to PTX L1::evict_* qualifiers
348enum class L1Eviction : uint8_t {
349 Normal = 0, // Default behavior (no qualifier)
350 Unchanged = 1, // L1::evict_unchanged
351 First = 2, // L1::evict_first
352 Last = 3, // L1::evict_last
353 NoAllocate = 4, // L1::no_allocate
354};
355
356// L2 Eviction Policy - maps to PTX L2::evict_* qualifiers
357enum class L2Eviction : uint8_t {
358 Normal = 0, // Default behavior (no qualifier)
359 First = 1, // L2::evict_first
360 Last = 2, // L2::evict_last
361};
362
363// L2 Prefetch Size - maps to PTX L2::*B qualifiers
364enum class L2Prefetch : uint8_t {
365 None = 0, // No prefetch hint
366 Bytes64 = 1, // L2::64B
367 Bytes128 = 2, // L2::128B
368 Bytes256 = 3, // L2::256B
369};
370
371// Bitfield layout for encoded eviction/prefetch hints (stored in unsigned):
372// Bits 0-2: L1 Eviction (3 bits, 5 values)
373// Bits 3-4: L2 Eviction (2 bits, 3 values)
374// Bits 5-6: L2 Prefetch (2 bits, 4 values)
375// Bit 7: L2::cache_hint mode flag (set when using CachePolicy)
376// Bits 8-31: Reserved
377//
378// Using llvm::Bitfield for type-safe access with compile-time validation.
385
387 L2Prefetch P) {
388 unsigned Hint = 0;
392 return Hint;
393}
394
395inline L1Eviction decodeL1Eviction(unsigned Hint) {
397}
398
399inline L2Eviction decodeL2Eviction(unsigned Hint) {
401}
402
403inline L2Prefetch decodeL2Prefetch(unsigned Hint) {
405}
406
407inline bool isL2CacheHintMode(unsigned Hint) {
409}
410
413} // namespace PTXLdStInstCode
414
415/// PTXCvtMode - Conversion code enumeration
438
439/// PTXCmpMode - Comparison mode enumeration
440namespace PTXCmpMode {
458}
459
471
472enum class DivPrecisionLevel : unsigned {
474 Full = 1,
477};
478
479} // namespace NVPTX
481} // namespace llvm
482
483// Defines symbolic names for NVPTX registers. This defines a mapping from
484// register name to register number.
485#define GET_REGINFO_ENUM
486#include "NVPTXGenRegisterInfo.inc"
487
488// Defines symbolic names for NVPTX instructions, MC helper declarations,
489// and named operand helpers generated from UseNamedOperandTable=1.
490#define GET_INSTRINFO_ENUM
491#define GET_INSTRINFO_MC_HELPER_DECLS
492#define GET_INSTRINFO_OPERAND_ENUM
493#include "NVPTXGenInstrInfo.inc"
494
495#define GET_SUBTARGETINFO_ENUM
496#include "NVPTXGenSubtargetInfo.inc"
497
498#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:312
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:253
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(Module &M, ModuleAnalysisManager &MAM)
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:125
NVPTXLowerUnreachablePass(bool TrapUnreachable, bool NoTrapAfterNoreturn)
Definition NVPTX.h:192
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:140
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:440
PTXCvtMode - Conversion code enumeration.
Definition NVPTX.h:416
unsigned int OrderingUnderlyingType
Definition NVPTX.h:300
@ DeviceParam
Definition NVPTX.h:341
@ SharedCluster
Definition NVPTX.h:334
@ EntryParam
Definition NVPTX.h:335
unsigned encodeEvictionAndPrefetchHint(L1Eviction L1, L2Eviction L2, L2Prefetch P)
Definition NVPTX.h:386
L2Prefetch decodeL2Prefetch(unsigned Hint)
Definition NVPTX.h:403
@ VecInstTypeShift
Definition NVPTX.h:274
@ VecExtract
Definition NVPTX.h:282
@ VecInsert
Definition NVPTX.h:283
@ VecShuffle
Definition NVPTX.h:281
@ VecInstTypeMask
Definition NVPTX.h:275
Bitfield::Element< L2Eviction, 3, 2, L2Eviction::Last > L2EvictionBits
Definition NVPTX.h:381
unsigned int ScopeUnderlyingType
Definition NVPTX.h:316
L1Eviction decodeL1Eviction(unsigned Hint)
Definition NVPTX.h:395
L2Eviction decodeL2Eviction(unsigned Hint)
Definition NVPTX.h:399
DivPrecisionLevel
Definition NVPTX.h:472
bool isL2CacheHintMode(unsigned Hint)
Definition NVPTX.h:407
@ DefaultDevice
Definition NVPTX.h:323
@ LASTSCOPE
Definition NVPTX.h:324
Bitfield::Element< L1Eviction, 0, 3, L1Eviction::NoAllocate > L1EvictionBits
Definition NVPTX.h:379
Bitfield::Element< bool, 7, 1 > L2CacheHintBit
Definition NVPTX.h:384
@ RelaxedMMIO
Definition NVPTX.h:313
@ AcquireRelease
Definition NVPTX.h:309
@ NotAtomic
Definition NVPTX.h:302
@ SequentiallyConsistent
Definition NVPTX.h:310
@ isStoreShift
Definition NVPTX.h:296
@ isLoadShift
Definition NVPTX.h:294
@ isLoadMask
Definition NVPTX.h:293
@ isStoreMask
Definition NVPTX.h:295
@ SimpleMoveShift
Definition NVPTX.h:290
@ SimpleMoveMask
Definition NVPTX.h:289
unsigned int AddressSpaceUnderlyingType
Definition NVPTX.h:327
Bitfield::Element< L2Prefetch, 5, 2, L2Prefetch::Bytes256 > L2PrefetchBits
Definition NVPTX.h:382
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 &)
ModulePass * createNVPTXCanonicalizeDynamicSharedLegacyPass()
void initializeNVPTXIRPeepholePass(PassRegistry &)
ModulePass * createNVPTXLowerArgsPass()
FunctionPass * createNVPTXMarkKernelPtrsGlobalPass()
void initializeNVVMIntrRangePass(PassRegistry &)
MachineFunctionPass * createNVPTXPrologEpilogLegacyPass()
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:280
void initializeNVPTXCanonicalizeDynamicSharedLegacyPassPass(PassRegistry &)
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.