[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