[llvm] [AMDGPU] Support image atomic no return instructions (PR #150742)

Mirko BrkuĊĦanin via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 12 10:22:03 PDT 2025


================
@@ -883,6 +883,17 @@ class MIMG_Atomic_gfx6789_base <bits<8> op, string asm, RegisterOperand data_rc,
   let AsmString = asm#" $vdst, $vaddr, $srsrc$dmask$unorm$cpol$r128$tfe$lwe$da";
 }
 
+class MIMG_Atomic_NoReturn_gfx6789_base <bits<8> op, string asm, RegisterOperand data_rc,
+                                         RegisterClass addr_rc, string dns="">
+  : MIMG_gfx6789 <op, (outs), dns> {
+  let isCodeGenOnly = 1;
+  let InOperandList = (ins data_rc:$vdata, addr_rc:$vaddr, SReg_256_XNULL:$srsrc,
+                           DMask:$dmask, UNorm:$unorm, CPol_0:$cpol,
+                           R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da);
+  
+  let AsmString = asm#" $vdata, $vaddr, $srsrc$dmask$unorm$cpol$r128$tfe$lwe$da";
+}
----------------
mbrkusanin wrote:

Instead of making a _NoReturn version, you can just add an argument to existing class, something like "bit noRet" and make changes based on that. Something like:

```
!if(noRtn, (outs), (outs data_rc:$vdst))
```
```
let Constraints = !if(noRtn, "", "$vdst = $vdata");
```
for every difference.

("noRet" should be passed all the way from top MIMG_Atomic class, see other inline comment)

https://github.com/llvm/llvm-project/pull/150742


More information about the llvm-commits mailing list