================
@@ -2314,6 +2317,33 @@ bool SPIRVInstructionSelector::selectAtomicRMW(Register 
ResVReg,
   return true;
 }
 
+bool SPIRVInstructionSelector::selectInterlockedAdd(Register ResVReg,
+                                                    SPIRVTypeInst ResType,
+                                                    MachineInstr &I) const {
+  Register Ptr = I.getOperand(2).getReg();
+  Register Value = I.getOperand(3).getReg();
+
+  SPIRV::StorageClass::StorageClass SC = GR.getPointerStorageClass(Ptr);
+  uint32_t Scope = static_cast<uint32_t>(SC == SPIRV::StorageClass::Workgroup
+                                             ? SPIRV::Scope::Workgroup
+                                             : SPIRV::Scope::Device);
+  Register ScopeReg = buildI32Constant(Scope, I);
+
+  uint32_t MemSem = static_cast<uint32_t>(getMemSemanticsForStorageClass(SC)) |
+                    static_cast<uint32_t>(SPIRV::MemorySemantics::None);
----------------
Icohedron wrote:

nit: `SPIRV::MemorySemantics::None` is 0 so computing a bitwise OR with it is a 
no-op.
```suggestion
  uint32_t MemSem = static_cast<uint32_t>(getMemSemanticsForStorageClass(SC));
```

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

Reply via email to