[PATCH] D72941: Handle ptrtoint in InferAddressSpace

Gang Chen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 17 11:21:06 PST 2020


gangche1 created this revision.
gangche1 added a reviewer: hliao.
Herald added subscribers: llvm-commits, kerbowa, hiraditya, nhaehnle, jvesely.
Herald added a project: LLVM.

We see in our IR that has addrspacecast before ptrtoint, which requires this optimization. Therefore suggest to add the handling of ptrtoint.


https://reviews.llvm.org/D72941

Files:
  llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
  llvm/test/Transforms/InferAddressSpaces/AMDGPU/ptrtoint.ll


Index: llvm/test/Transforms/InferAddressSpaces/AMDGPU/ptrtoint.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/InferAddressSpaces/AMDGPU/ptrtoint.ll
@@ -0,0 +1,12 @@
+; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -infer-address-spaces %s | FileCheck %s
+
+; Optimized to private ptrtoint.
+; CHECK-LABEL: @ptrtoint_private(
+; CHECK-NEXT: %val = ptrtoint i32 addrspace(5)* %input to i32
+define i32 @ptrtoint_private(i32 addrspace(5)* nocapture %input) #0 {
+  %tmp0 = addrspacecast i32 addrspace(5)* %input to i32*
+  %val =  ptrtoint i32* %tmp0 to i32
+  ret i32 %val
+}
+
+attributes #0 = { nounwind }
Index: llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
+++ llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
@@ -361,6 +361,8 @@
       PushPtrOperand(LI->getPointerOperand());
     else if (auto *SI = dyn_cast<StoreInst>(&I))
       PushPtrOperand(SI->getPointerOperand());
+    else if (auto *P2I = dyn_cast<PtrToIntInst>(&I))
+      PushPtrOperand(P2I->getPointerOperand());
     else if (auto *RMW = dyn_cast<AtomicRMWInst>(&I))
       PushPtrOperand(RMW->getPointerOperand());
     else if (auto *CmpX = dyn_cast<AtomicCmpXchgInst>(&I))
@@ -769,6 +771,9 @@
     return OpNo == StoreInst::getPointerOperandIndex() &&
            (VolatileIsAllowed || !SI->isVolatile());
 
+  if (auto *P2I = dyn_cast<PtrToIntInst>(Inst))
+    return OpNo == PtrToIntInst::getPointerOperandIndex();
+
   if (auto *RMW = dyn_cast<AtomicRMWInst>(Inst))
     return OpNo == AtomicRMWInst::getPointerOperandIndex() &&
            (VolatileIsAllowed || !RMW->isVolatile());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72941.238836.patch
Type: text/x-patch
Size: 1742 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200117/aa6040a3/attachment.bin>


More information about the llvm-commits mailing list