@@ -2164,12 +2164,18 @@ def LLVM_AtomicRMWOp : LLVM_MemAccessOpBase<"atomicrmw", [
21642164 LLVM_AtomicRMWType:$val, AtomicOrdering:$ordering,
21652165 OptionalAttr<StrAttr>:$syncscope,
21662166 OptionalAttr<I64Attr>:$alignment,
2167- UnitAttr:$volatile_);
2167+ UnitAttr:$volatile_,
2168+ UnitAttr:$amdgpu_no_fine_grained_memory,
2169+ UnitAttr:$amdgpu_ignore_denormal_mode,
2170+ UnitAttr:$amdgpu_no_remote_memory);
21682171 // Append the aliasing related attributes defined in LLVM_MemAccessOpBase.
21692172 let arguments = !con(args, aliasAttrs);
21702173 let results = (outs LLVM_AtomicRMWType:$res);
21712174 let assemblyFormat = [{
2172- (`volatile` $volatile_^)? $bin_op $ptr `,` $val
2175+ (`volatile` $volatile_^)?
2176+ (`amdgpu_ignore_denormal_mode` $amdgpu_ignore_denormal_mode^)?
2177+ (`amdgpu_no_fine_grained_memory` $amdgpu_no_fine_grained_memory^)?
2178+ (`amdgpu_no_remote_memory` $amdgpu_no_remote_memory^)? $bin_op $ptr `,` $val
21732179 (`syncscope` `(` $syncscope^ `)`)? $ordering attr-dict `:`
21742180 qualified(type($ptr)) `,` type($val)
21752181 }];
@@ -2179,6 +2185,19 @@ def LLVM_AtomicRMWOp : LLVM_MemAccessOpBase<"atomicrmw", [
21792185 convertAtomicBinOpToLLVM($bin_op), $ptr, $val, llvm::MaybeAlign(),
21802186 convertAtomicOrderingToLLVM($ordering));
21812187 $res = inst;
2188+ auto &llvmContext = inst->getContext();
2189+ if($amdgpu_ignore_denormal_mode) {
2190+ llvm::MDNode *metadata = llvm::MDNode::get(llvmContext, std::nullopt);
2191+ inst->setMetadata((llvmContext).getMDKindID("amdgpu.ignore.denormal.mode"), metadata);
2192+ }
2193+ if($amdgpu_no_fine_grained_memory) {
2194+ llvm::MDNode *metadata = llvm::MDNode::get(llvmContext, std::nullopt);
2195+ inst->setMetadata(llvmContext.getMDKindID("amdgpu.no.fine.grained.memory"), metadata);
2196+ }
2197+ if($amdgpu_no_remote_memory) {
2198+ llvm::MDNode *metadata = llvm::MDNode::get(llvmContext, std::nullopt);
2199+ inst->setMetadata((llvmContext).getMDKindID("amdgpu.no.remote.memory"), metadata);
2200+ }
21822201 }] # setVolatileCode
21832202 # setSyncScopeCode
21842203 # setAlignmentCode
@@ -2192,12 +2211,16 @@ def LLVM_AtomicRMWOp : LLVM_MemAccessOpBase<"atomicrmw", [
21922211 convertAtomicOrderingFromLLVM(atomicInst->getOrdering()),
21932212 getLLVMSyncScope(atomicInst), alignment, atomicInst->isVolatile());
21942213 }];
2195- list<int> llvmArgIndices = [-1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1];
2214+ list<int> llvmArgIndices = [-1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2215+ -1];
21962216 let builders = [
2197- OpBuilder<(ins "LLVM::AtomicBinOp":$binOp, "Value":$ptr, "Value":$val,
2217+ OpBuilder<(ins "LLVM::AtomicBinOp":$binOp, "Value":$ptr,"Value":$val,
21982218 "LLVM::AtomicOrdering":$ordering,
21992219 CArg<"StringRef", "StringRef()">:$syncscope,
2200- CArg<"unsigned", "0">:$alignment, CArg<"bool", "false">:$isVolatile
2220+ CArg<"unsigned", "0">:$alignment, CArg<"bool", "false">:$isVolatile,
2221+ CArg<"bool", "false">:$isAmdgpuIgnoreDenormalMode,
2222+ CArg<"bool", "false">:$isAmdgpuNoFineGrainedMemory,
2223+ CArg<"bool", "false">:$isAmdgpuNoRemoteMemory
22012224 )>
22022225 ];
22032226 let hasVerifier = 1;
0 commit comments