Skip to content

Commit 61923bd

Browse files
committed
[mlir][llvm] Changes to support amdgpu unsafe floating point atomic operations
1 parent d7f096e commit 61923bd

File tree

6 files changed

+29
-0
lines changed

6 files changed

+29
-0
lines changed

mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1899,6 +1899,7 @@ def LLVM_LLVMFuncOp : LLVM_Op<"func", [
18991899
OptionalAttr<BoolAttr>:$no_nans_fp_math,
19001900
OptionalAttr<BoolAttr>:$approx_func_fp_math,
19011901
OptionalAttr<BoolAttr>:$no_signed_zeros_fp_math,
1902+
OptionalAttr<BoolAttr>:$amdgpu_unsafe_fp_atomics,
19021903
OptionalAttr<StrAttr>:$denormal_fp_math,
19031904
OptionalAttr<StrAttr>:$denormal_fp_math_f32,
19041905
OptionalAttr<StrAttr>:$fp_contract,

mlir/lib/Target/LLVMIR/ModuleImport.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2140,6 +2140,7 @@ static constexpr std::array kExplicitAttributes{
21402140
StringLiteral("aarch64_pstate_sm_body"),
21412141
StringLiteral("aarch64_pstate_sm_compatible"),
21422142
StringLiteral("aarch64_pstate_sm_enabled"),
2143+
StringLiteral("amdgpu-unsafe-fp-atomics"),
21432144
StringLiteral("alwaysinline"),
21442145
StringLiteral("approx-func-fp-math"),
21452146
StringLiteral("convergent"),
@@ -2256,6 +2257,8 @@ void ModuleImport::processFunctionAttributes(llvm::Function *func,
22562257
else if (func->hasFnAttribute("aarch64_preserves_za"))
22572258
funcOp.setArmPreservesZa(true);
22582259

2260+
if (func->hasFnAttribute("amdgpu-unsafe-fp-atomics"))
2261+
funcOp.setAmdgpuUnsafeFpAtomics(true);
22592262
llvm::Attribute attr = func->getFnAttribute(llvm::Attribute::VScaleRange);
22602263
if (attr.isValid()) {
22612264
MLIRContext *context = funcOp.getContext();

mlir/lib/Target/LLVMIR/ModuleTranslation.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1496,6 +1496,10 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
14961496
else if (func.getArmPreservesZa())
14971497
llvmFunc->addFnAttr("aarch64_preserves_za");
14981498

1499+
if (auto amdgpuUnsafeFpAtomics = func.getAmdgpuUnsafeFpAtomics())
1500+
llvmFunc->addFnAttr("amdgpu-unsafe-fp-atomics",
1501+
llvm::toStringRef(*amdgpuUnsafeFpAtomics));
1502+
14991503
if (auto targetCpu = func.getTargetCpu())
15001504
llvmFunc->addFnAttr("target-cpu", *targetCpu);
15011505

mlir/test/Dialect/LLVMIR/func.mlir

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ module {
236236
llvm.return
237237
}
238238

239+
llvm.func @amdgpu_fp_unsafe_atomics() attributes {amdgpu_fp_unsafe_atomics = true} {
240+
// CHECK: @amdgpu_fp_unsafe_atomics
241+
// CHECK-SAME: attributes {amdgpu_fp_unsafe_atomics = true}
242+
llvm.return
243+
}
244+
239245
// CHECK: llvm.comdat @__llvm_comdat
240246
llvm.comdat @__llvm_comdat {
241247
// CHECK: llvm.comdat_selector @any any

mlir/test/Target/LLVMIR/Import/function-attributes.ll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,12 @@ define void @arm_preserves_za_func() "aarch64_preserves_za" {
267267
ret void
268268
}
269269

270+
; // -----
271+
272+
; CHECK-LABEL: @func_attr_amdgpu_unsafe_fp_atomics_true
273+
; CHECK-SAME: attributes {amdgpu_unsafe_fp_atomics = true}
274+
declare void @func_attr_amdgpu_unsafe_fp_atomics_true() "amdgpu-unsafe-fp-atomics"="true"
275+
270276
// -----
271277

272278
; CHECK-LABEL: @section_func

mlir/test/Target/LLVMIR/llvmir.mlir

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2474,6 +2474,15 @@ llvm.func @preserves_za_func() attributes {arm_preserves_za} {
24742474

24752475
// -----
24762476

2477+
// CHECK-LABEL: @amdgpu_unsafe_fp_atomics_func
2478+
// CHECK-SAME: #[[ATTR:[0-9]*]]
2479+
llvm.func @amdgpu_unsafe_fp_atomics_func() attributes {amdgpu_unsafe_fp_atomics = true} {
2480+
llvm.return
2481+
}
2482+
// CHECK: #[[ATTR]] = { "amdgpu-unsafe-fp-atomics"="true" }
2483+
2484+
// -----
2485+
24772486
//
24782487
// frame pointer attribute.
24792488
//

0 commit comments

Comments
 (0)