[PATCH] D115669: AMDGPU: Combine is.shared/is.private of null/undef

Stanislav Mekhanoshin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 13 14:22:03 PST 2021


rampitec accepted this revision.
rampitec added a comment.
This revision is now accepted and ready to land.

LGTM



================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp:900
+
+    if (isa<ConstantPointerNull>(II.getArgOperand(0)))
+      return IC.replaceInstUsesWith(II, ConstantInt::getFalse(II.getType()));
----------------
rampitec wrote:
> rampitec wrote:
> > arsenm wrote:
> > > rampitec wrote:
> > > > Why cannot we have a shared or private null pointer?
> > > The query is for whether the particular address points into the aperture. The null pointer doesn't point at anything, so therefore it doesn't point into the shared/private segment
> > You can have a flat pointer pointing exactly into the address zero of LDS or private. Aren't these addresses also null?
> I believe this is not correct and clearly change in behavior:
> 
> ```
> define i1 @test(i32 addrspace(1)* %res) {
>   %cast = addrspacecast i8 addrspace(5)* null to i8*
>   %is_private = tail call i1 @llvm.amdgcn.is.private(i8* %cast)
>   ret i1 %is_private
> }
> 
> declare i1 @llvm.amdgcn.is.private(i8* nocapture)
> ```
> Right now it is true:
> 
> ```
>         s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
>         v_mov_b32_e32 v0, 1
>         s_setpc_b64 s[30:31]
> ```
Ah, OK. Checked definition of is_private and is_shared. They only take flat pointers, and flat null is not the same as private or shared null.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115669/new/

https://reviews.llvm.org/D115669



More information about the llvm-commits mailing list