================
@@ -824,9 +838,23 @@ SIAtomicAddrSpace 
SIMemOpAccess::toSIAtomicAddrSpace(unsigned AS) const {
   return SIAtomicAddrSpace::OTHER;
 }
 
+/// returns true if any instruction in \p MF accesses LDS through DMA.
+static bool containsLDSDMA(const MachineFunction &MF) {
+  return any_of(MF, [](const MachineBasicBlock &MBB) {
+    return any_of(MBB.instrs(), [](const MachineInstr &MI) {
+      return SIInstrInfo::isLDSDMA(MI);
----------------
krzysz00 wrote:

This is not correct.

Consider:
```
declare void @foo(ptr addrspace(1), ptr addrspace(3))

define void amdgpu_kernel @example(...) {flat_work_group_size="32,32"} {
  ...
  ;; Does this call a DMA? It _might_.
  call void @foo(ptr addrspace(1) %someGlobal, ptr addrspace(3) %someLds)
  fence release syncsope("workgroup")
  ...
}
```

https://github.com/llvm/llvm-project/pull/224065
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to