[llvm] [NVPTX] Check Before inserting AddrSpaceCastInst in NVPTXLoweringAlloca (PR #106127)

weiwei chen via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 3 07:59:10 PDT 2024


================
@@ -72,12 +72,21 @@ bool NVPTXLowerAlloca::runOnFunction(Function &F) {
         Changed = true;
         auto ETy = allocaInst->getAllocatedType();
         auto LocalAddrTy = PointerType::get(ETy, ADDRESS_SPACE_LOCAL);
-        auto NewASCToLocal = new AddrSpaceCastInst(allocaInst, LocalAddrTy, "");
-        auto GenericAddrTy = PointerType::get(ETy, ADDRESS_SPACE_GENERIC);
-        auto NewASCToGeneric =
-            new AddrSpaceCastInst(NewASCToLocal, GenericAddrTy, "");
-        NewASCToLocal->insertAfter(allocaInst);
-        NewASCToGeneric->insertAfter(NewASCToLocal);
+        PointerType *AllocInstPtrTy =
+            cast<PointerType>(allocaInst->getType()->getScalarType());
+        Instruction *NewASCToGeneric = allocaInst;
+        if (AllocInstPtrTy->getAddressSpace() != ADDRESS_SPACE_LOCAL) {
----------------
weiweichen wrote:

> > Do you mean that an explicit assert should be added in NVPTXLowerAlloca.cpp instead of rely on the constructor of AddrSpaceCastInst
> 
> Yes. It's better to catch it early, rather than add more wrong things, and wait for something to break later on, and then back-track.
> 
> By default, IR operates on generic pointers. Specific address spaces are target-dependent and are not guaranteed to be supported, even if IR remains syntactically valid. For NVPTX, we can only support allocas in the default AS or AS(5).

Sounds good! I pushed a commit with the early checking and assert with a more specific error message. 

https://github.com/llvm/llvm-project/pull/106127


More information about the llvm-commits mailing list