[llvm] [NVPTX][InferAS] assume alloca instructions are in local AS (PR #121710)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 31 12:12:59 PST 2025
================
@@ -334,29 +335,34 @@ bool NVPTXDAGToDAGISel::tryEXTRACT_VECTOR_ELEMENT(SDNode *N) {
return true;
}
-static unsigned int getCodeAddrSpace(MemSDNode *N) {
- const Value *Src = N->getMemOperand()->getValue();
-
- if (!Src)
+static std::optional<unsigned> convertAS(unsigned AS) {
+ switch (AS) {
+ case llvm::ADDRESS_SPACE_LOCAL:
+ return NVPTX::AddressSpace::Local;
+ case llvm::ADDRESS_SPACE_GLOBAL:
+ return NVPTX::AddressSpace::Global;
+ case llvm::ADDRESS_SPACE_SHARED:
+ return NVPTX::AddressSpace::Shared;
+ case llvm::ADDRESS_SPACE_GENERIC:
return NVPTX::AddressSpace::Generic;
-
- if (auto *PT = dyn_cast<PointerType>(Src->getType())) {
- switch (PT->getAddressSpace()) {
- case llvm::ADDRESS_SPACE_LOCAL:
- return NVPTX::AddressSpace::Local;
- case llvm::ADDRESS_SPACE_GLOBAL:
- return NVPTX::AddressSpace::Global;
- case llvm::ADDRESS_SPACE_SHARED:
- return NVPTX::AddressSpace::Shared;
- case llvm::ADDRESS_SPACE_GENERIC:
- return NVPTX::AddressSpace::Generic;
- case llvm::ADDRESS_SPACE_PARAM:
- return NVPTX::AddressSpace::Param;
- case llvm::ADDRESS_SPACE_CONST:
- return NVPTX::AddressSpace::Const;
- default: break;
- }
+ case llvm::ADDRESS_SPACE_PARAM:
+ return NVPTX::AddressSpace::Param;
+ case llvm::ADDRESS_SPACE_CONST:
+ return NVPTX::AddressSpace::Const;
+ default:
+ return std::nullopt;
}
+}
+
+static unsigned int getCodeAddrSpace(const MemSDNode *N) {
+ if (const Value *Src = N->getMemOperand()->getValue())
+ if (auto *PT = dyn_cast<PointerType>(Src->getType()))
+ if (auto AS = convertAS(PT->getAddressSpace()))
+ return AS.value();
+
+ if (auto AS = convertAS(N->getMemOperand()->getAddrSpace()))
+ return AS.value();
----------------
AlexMaclean wrote:
We don't, fixed!
https://github.com/llvm/llvm-project/pull/121710
More information about the llvm-commits
mailing list