[PATCH] D119216: [AMDGPU] replace hostcall module flag with function attribute

Johannes Doerfert via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 8 08:28:08 PST 2022


jdoerfert added inline comments.


================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp:566
+      return false;
+    };
+
----------------
jdoerfert wrote:
> sameerds wrote:
> > jdoerfert wrote:
> > > You can use AAPointerInfo for the call site return IRPosition. It will (through the iterations) gather all accesses and put them into "bins" based on offset and size. It deals with uses in calls, etc. and if there is stuff missing it is better to add it in one place so we benefit throughout. 
> > I am not following what you have in mind. "implicitarg_ptr" is a pointer returned by an intrinsic that reads an ABI-defined register. I need to check that for a given call-graph, a particular range of bytes relative to that base pointer are never accessed. The above DFS on the uses conservatively assumes that such a load exists unless it can conclusively trace every use of the base pointer. This may include the pointer being passed to an extern function or being stored into a different memory location (although we don't expect ABI registers being capture this way). I am not seeing how to construct this around AAPointerInfo. As far as I can see, the public interface only talks about uses that are recognized as loads and stores.
> Not actually tested, replaces the function body. Depends on D119249.
> ```
> const auto PointerInfoAA = A.getAAFor<AAPointerInfo>(*this, IRPosition::callback_returned(cast<CallBase>(Ptr)), DepClassTy::Required);
> if (!PointerInfoAA.getState().isValidState())
>   return true; // Abort (which is weird as false is abort in the other CB).
> AAPointerInfo::OffsetAndSize OAS(*Position, /* probably look pointer width up in DL */ 8);
> return !forallInterferingAccesses(OAS, [](const AAPointerInfo::Access &Acc, bool IsExact) {
>    return Acc.getRemoteInst()->isDroppable(); });
> ```
You don't actually need the state check.
And as I said, this will take care of following pointers passed into callees or through memory to other places, all while ignoring dead code, etc.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D119216



More information about the cfe-commits mailing list