[clang] [llvm] [SPIR-V] Encode Atomic metadata as UserSemantic string decoration (PR #193019)

Marcos Maronas via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 21 02:08:20 PDT 2026


================
@@ -576,6 +579,28 @@ StringRef SPIRVTargetCodeGenInfo::getLLVMSyncScopeStr(
   return "";
 }
 
+void SPIRVTargetCodeGenInfo::setTargetAtomicMetadata(
+    CodeGenFunction &CGF, llvm::Instruction &AtomicInst,
+    const AtomicExpr *AE) const {
+  if (CGF.CGM.getTriple().getVendor() != llvm::Triple::VendorType::AMD)
+    return;
+
+  auto *RMW = dyn_cast<llvm::AtomicRMWInst>(&AtomicInst);
+  if (!RMW)
+    return;
+
+  AtomicOptions AO = CGF.CGM.getAtomicOpts();
+  llvm::MDNode *Empty = llvm::MDNode::get(CGF.getLLVMContext(), {});
+  if (!AO.getOption(clang::AtomicOptionKind::FineGrainedMemory))
+    RMW->setMetadata("amdgpu.no.fine.grained.memory", Empty);
+  if (!AO.getOption(clang::AtomicOptionKind::RemoteMemory))
+    RMW->setMetadata("amdgpu.no.remote.memory", Empty);
+  if (AO.getOption(clang::AtomicOptionKind::IgnoreDenormalMode) &&
+      RMW->getOperation() == llvm::AtomicRMWInst::FAdd &&
+      RMW->getType()->isFloatTy())
+    RMW->setMetadata("amdgpu.ignore.denormal.mode", Empty);
----------------
maarquitos14 wrote:

Do we never need to set anything other than empty metadata?

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


More information about the cfe-commits mailing list