|
LLVM 24.0.0git
|
#include "MCTargetDesc/NVPTXBaseInfo.h"#include "NVPTX.h"#include "NVPTXISelLowering.h"#include "NVPTXSelectionDAGInfo.h"#include "NVPTXTargetMachine.h"#include "NVPTXUtilities.h"#include "llvm/ADT/APInt.h"#include "llvm/ADT/MapVector.h"#include "llvm/ADT/StringSwitch.h"#include "llvm/ADT/Twine.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/CodeGen/ISDOpcodes.h"#include "llvm/CodeGen/SelectionDAG.h"#include "llvm/CodeGen/SelectionDAGISel.h"#include "llvm/CodeGen/SelectionDAGNodes.h"#include "llvm/IR/Constants.h"#include "llvm/IR/DiagnosticInfo.h"#include "llvm/IR/GlobalValue.h"#include "llvm/IR/InlineAsm.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/IntrinsicsNVPTX.h"#include "llvm/IR/LLVMContext.h"#include "llvm/IR/Metadata.h"#include "llvm/IR/NVVMIntrinsicUtils.h"#include "llvm/Support/AtomicOrdering.h"#include "llvm/Support/CommandLine.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/FormatVariadic.h"#include "llvm/Support/MathExtras.h"#include "llvm/TargetParser/AtomicScope.h"#include <optional>#include "NVPTXGenDAGISel.inc"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "nvptx-isel" |
| #define | PASS_NAME "NVPTX DAG->DAG Pattern Instruction Selection" |
| #define | TCGEN05_LD_OPCODE(SHAPE, NUM) |
| #define | TCGEN05_ST_OPCODE(SHAPE, NUM) |
Functions | |
| static unsigned | getTcgen05LdOpcode (unsigned IID, bool enablePack) |
| static NVPTX::Scope | resolveScope (NVPTX::Scope S, const NVPTXSubtarget *T) |
| static bool | canLowerToLDG (const MemSDNode &N, const NVPTXSubtarget &Subtarget, NVPTX::AddressSpace CodeAddrSpace) |
| static unsigned int | getFenceOp (NVPTX::Ordering O, NVPTX::Scope S, NVPTXSubtarget const *T) |
| static std::optional< unsigned > | pickOpcodeForVT (MVT::SimpleValueType VT, std::optional< unsigned > Opcode_i16, std::optional< unsigned > Opcode_i32, std::optional< unsigned > Opcode_i64) |
| static bool | isAddLike (const SDValue V) |
| static SDValue | stripAssertAlign (SDValue N) |
| static SDValue | selectBaseADDR (SDValue N, SelectionDAG *DAG) |
| static SDValue | accumulateOffset (SDValue &Addr, SDLoc DL, SelectionDAG *DAG) |
| static std::pair< SDValue, SDValue > | selectADDR (SDValue Addr, SelectionDAG *DAG) |
| static void | emitInvalidMemCacheHint (LLVMContext &Ctx, const Twine &Msg) |
| static std::optional< NVPTX::L1Eviction > | parseL1Eviction (StringRef Str) |
| static std::optional< NVPTX::L2Eviction > | parseL2Eviction (StringRef Str) |
| static std::optional< NVPTX::L2Prefetch > | parseL2Prefetch (StringRef Str) |
| template<typename T> | |
| static std::optional< T > | parseMemCacheHintStringValue (LLVMContext &Ctx, StringRef Key, const Metadata *Value, std::optional< T >(*Parse)(StringRef)) |
| static bool | isGlobalOrGeneric (NVPTX::AddressSpace AddrSpace) |
| static bool | isL2PrefetchSupported (const NVPTXSubtarget &Subtarget, NVPTX::L2Prefetch Prefetch, NVPTXMemCacheHintAccess Access) |
| static bool | isL2EvictionSupported (const NVPTXSubtarget &Subtarget, NVPTX::L2Eviction Eviction, NVPTXMemCacheHintAccess Access) |
| static unsigned | getStoreVectorNumElts (SDNode *N) |
| static unsigned | getTcgen05StOpcode (unsigned IID, bool enableUnpack) |
Variables | |
| static cl::opt< bool > | EnableRsqrtOpt ("nvptx-rsqrt-approx-opt", cl::init(true), cl::Hidden, cl::desc("Enable reciprocal sqrt optimization")) |
| static cl::opt< bool > | EnableMADWide ("nvptx-mad-wide-opt", cl::init(false), cl::Hidden, cl::desc("Enable MAD wide optimization")) |
| #define DEBUG_TYPE "nvptx-isel" |
Definition at line 48 of file NVPTXISelDAGToDAG.cpp.
| #define PASS_NAME "NVPTX DAG->DAG Pattern Instruction Selection" |
Definition at line 49 of file NVPTXISelDAGToDAG.cpp.
| #define TCGEN05_LD_OPCODE | ( | SHAPE, | |
| NUM ) |
Definition at line 330 of file NVPTXISelDAGToDAG.cpp.
Referenced by getTcgen05LdOpcode().
| #define TCGEN05_ST_OPCODE | ( | SHAPE, | |
| NUM ) |
Definition at line 2144 of file NVPTXISelDAGToDAG.cpp.
Referenced by getTcgen05StOpcode().
|
static |
Definition at line 1110 of file NVPTXISelDAGToDAG.cpp.
References DL, llvm::dyn_cast(), llvm::SDNode::getOperand(), llvm::SDValue::getOperand(), llvm::APInt::getSExtValue(), llvm::SelectionDAG::getSignedTargetConstant(), isAddLike(), llvm::APInt::sext(), and stripAssertAlign().
Referenced by selectADDR().
|
static |
Definition at line 908 of file NVPTXISelDAGToDAG.cpp.
References llvm::NVPTX::Global, llvm::NVPTXSubtarget::hasLDG(), and N.
|
static |
Definition at line 1148 of file NVPTXISelDAGToDAG.cpp.
References llvm::DS_Warning, and Msg.
Referenced by parseMemCacheHintStringValue().
|
static |
Definition at line 916 of file NVPTXISelDAGToDAG.cpp.
References llvm::NVPTX::Acquire, llvm::NVPTX::AcquireRelease, llvm::NVPTX::Block, llvm::NVPTX::Cluster, llvm::NVPTX::DefaultDevice, llvm::NVPTX::Device, llvm::formatv(), llvm_unreachable, llvm::NVPTX::NotAtomic, llvm::NVPTX::Relaxed, llvm::NVPTX::RelaxedMMIO, llvm::NVPTX::Release, llvm::report_fatal_error(), resolveScope(), llvm::NVPTX::SequentiallyConsistent, llvm::NVPTX::System, T, llvm::NVPTX::Thread, and llvm::NVPTX::Volatile.
Definition at line 1386 of file NVPTXISelDAGToDAG.cpp.
References llvm_unreachable, N, llvm::NVPTXISD::StoreV2, llvm::NVPTXISD::StoreV4, and llvm::NVPTXISD::StoreV8.
Definition at line 334 of file NVPTXISelDAGToDAG.cpp.
References llvm_unreachable, and TCGEN05_LD_OPCODE.
Definition at line 2148 of file NVPTXISelDAGToDAG.cpp.
References llvm_unreachable, and TCGEN05_ST_OPCODE.
Definition at line 1082 of file NVPTXISelDAGToDAG.cpp.
References llvm::ISD::ADD, and llvm::ISD::OR.
Referenced by accumulateOffset(), and checkIfSafeAddSequence().
|
static |
Definition at line 1198 of file NVPTXISelDAGToDAG.cpp.
References llvm::NVPTX::Generic, and llvm::NVPTX::Global.
Referenced by isL2EvictionSupported(), and isL2PrefetchSupported().
|
static |
Definition at line 1222 of file NVPTXISelDAGToDAG.cpp.
References Access, llvm::NVPTXSubtarget::hasL2EvictionHint(), isGlobalOrGeneric(), and llvm::NVPTX::Normal.
|
static |
Definition at line 1203 of file NVPTXISelDAGToDAG.cpp.
References Access, llvm::NVPTX::Bytes128, llvm::NVPTX::Bytes256, llvm::NVPTX::Bytes64, llvm::NVPTXSubtarget::hasL2Prefetch128B(), llvm::NVPTXSubtarget::hasL2Prefetch256B(), llvm::NVPTXSubtarget::hasL2Prefetch64B(), isGlobalOrGeneric(), llvm_unreachable, and llvm::NVPTX::None.
|
static |
Definition at line 1153 of file NVPTXISelDAGToDAG.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::NVPTX::First, llvm::NVPTX::Last, llvm::NVPTX::NoAllocate, llvm::NVPTX::Normal, and llvm::NVPTX::Unchanged.
|
static |
Definition at line 1163 of file NVPTXISelDAGToDAG.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::NVPTX::First, llvm::NVPTX::Last, and llvm::NVPTX::Normal.
|
static |
Definition at line 1171 of file NVPTXISelDAGToDAG.cpp.
References llvm::NVPTX::Bytes128, llvm::NVPTX::Bytes256, llvm::NVPTX::Bytes64, llvm::StringSwitch< T, R >::Case(), and llvm::StringSwitch< T, R >::Default().
|
static |
Definition at line 1181 of file NVPTXISelDAGToDAG.cpp.
References llvm::dyn_cast(), emitInvalidMemCacheHint(), and llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key.
|
static |
Definition at line 1057 of file NVPTXISelDAGToDAG.cpp.
|
static |
Definition at line 667 of file NVPTXISelDAGToDAG.cpp.
References llvm::NVPTX::Block, llvm::NVPTX::Cluster, and T.
Referenced by getFenceOp().
|
static |
Definition at line 1129 of file NVPTXISelDAGToDAG.cpp.
References accumulateOffset(), llvm::sampleprof::Base, llvm::Offset, and selectBaseADDR().
|
static |
Definition at line 1095 of file NVPTXISelDAGToDAG.cpp.
References llvm::dyn_cast(), llvm::SelectionDAG::getTargetExternalSymbol(), llvm::SelectionDAG::getTargetFrameIndex(), llvm::SelectionDAG::getTargetGlobalAddress(), N, and stripAssertAlign().
Referenced by selectADDR().
Definition at line 1087 of file NVPTXISelDAGToDAG.cpp.
References llvm::ISD::AssertAlign, and N.
Referenced by accumulateOffset(), and selectBaseADDR().
|
static |