Author: Kiran Chandramohan Date: 2025-07-24T20:33:43+01:00 New Revision: 32c9e86d027efc84ba696a38ef626ae04d306ec0
URL: https://github.com/llvm/llvm-project/commit/32c9e86d027efc84ba696a38ef626ae04d306ec0 DIFF: https://github.com/llvm/llvm-project/commit/32c9e86d027efc84ba696a38ef626ae04d306ec0.diff LOG: Revert "[flang][flang-driver][mlir][OpenMP] atomic control support (#143441)" This reverts commit f44346dc1f6252716cfc62bb0687e3932a93089f. Added: Modified: clang/include/clang/Driver/Options.td flang/include/flang/Frontend/TargetOptions.h flang/include/flang/Optimizer/Dialect/Support/FIRContext.h flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Lower/Bridge.cpp flang/lib/Lower/OpenMP/Atomic.cpp flang/lib/Optimizer/Dialect/Support/FIRContext.cpp mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td mlir/test/Dialect/OpenMP/ops.mlir Removed: flang/test/Lower/OpenMP/atomic-control-options.f90 ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index fa248381583cd..916400efdb449 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2320,21 +2320,21 @@ def fsymbol_partition_EQ : Joined<["-"], "fsymbol-partition=">, Group<f_Group>, defm atomic_remote_memory : BoolFOption<"atomic-remote-memory", LangOpts<"AtomicRemoteMemory">, DefaultFalse, - PosFlag<SetTrue, [], [ClangOption, CC1Option, FlangOption, FC1Option], "May have">, - NegFlag<SetFalse, [], [ClangOption, FlangOption], "Assume no">, - BothFlags<[], [ClangOption, FlangOption], " atomic operations on remote memory">>; + PosFlag<SetTrue, [], [ClangOption, CC1Option], "May have">, + NegFlag<SetFalse, [], [ClangOption], "Assume no">, + BothFlags<[], [ClangOption], " atomic operations on remote memory">>; defm atomic_fine_grained_memory : BoolFOption<"atomic-fine-grained-memory", LangOpts<"AtomicFineGrainedMemory">, DefaultFalse, - PosFlag<SetTrue, [], [ClangOption, CC1Option, FlangOption, FC1Option], "May have">, - NegFlag<SetFalse, [], [ClangOption, FlangOption], "Assume no">, - BothFlags<[], [ClangOption, FlangOption], " atomic operations on fine-grained memory">>; + PosFlag<SetTrue, [], [ClangOption, CC1Option], "May have">, + NegFlag<SetFalse, [], [ClangOption], "Assume no">, + BothFlags<[], [ClangOption], " atomic operations on fine-grained memory">>; defm atomic_ignore_denormal_mode : BoolFOption<"atomic-ignore-denormal-mode", LangOpts<"AtomicIgnoreDenormalMode">, DefaultFalse, - PosFlag<SetTrue, [], [ClangOption, CC1Option, FlangOption, FC1Option], "Allow">, - NegFlag<SetFalse, [], [ClangOption, FlangOption], "Disallow">, - BothFlags<[], [ClangOption, FlangOption], " atomic operations to ignore denormal mode">>; + PosFlag<SetTrue, [], [ClangOption, CC1Option], "Allow">, + NegFlag<SetFalse, [], [ClangOption], "Disallow">, + BothFlags<[], [ClangOption], " atomic operations to ignore denormal mode">>; defm memory_profile : OptInCC1FFlag<"memory-profile", "Enable", "Disable", " heap memory profiling">; def fmemory_profile_EQ : Joined<["-"], "fmemory-profile=">, @@ -5360,9 +5360,9 @@ defm amdgpu_precise_memory_op " precise memory mode (AMDGPU only)">; def munsafe_fp_atomics : Flag<["-"], "munsafe-fp-atomics">, - Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, Alias<fatomic_ignore_denormal_mode>; + Visibility<[ClangOption, CC1Option]>, Alias<fatomic_ignore_denormal_mode>; def mno_unsafe_fp_atomics : Flag<["-"], "mno-unsafe-fp-atomics">, - Visibility<[ClangOption, FlangOption]>, Alias<fno_atomic_ignore_denormal_mode>; + Visibility<[ClangOption]>, Alias<fno_atomic_ignore_denormal_mode>; def faltivec : Flag<["-"], "faltivec">, Group<f_Group>; def fno_altivec : Flag<["-"], "fno-altivec">, Group<f_Group>; diff --git a/flang/include/flang/Frontend/TargetOptions.h b/flang/include/flang/Frontend/TargetOptions.h index f6e5634d5a995..002d8d158abd4 100644 --- a/flang/include/flang/Frontend/TargetOptions.h +++ b/flang/include/flang/Frontend/TargetOptions.h @@ -53,11 +53,6 @@ class TargetOptions { /// Print verbose assembly bool asmVerbose = false; - - /// Atomic control options - bool atomicIgnoreDenormalMode = false; - bool atomicRemoteMemory = false; - bool atomicFineGrainedMemory = false; }; } // end namespace Fortran::frontend diff --git a/flang/include/flang/Optimizer/Dialect/Support/FIRContext.h b/flang/include/flang/Optimizer/Dialect/Support/FIRContext.h index c0c0b744206cd..2df14f83c11e1 100644 --- a/flang/include/flang/Optimizer/Dialect/Support/FIRContext.h +++ b/flang/include/flang/Optimizer/Dialect/Support/FIRContext.h @@ -58,25 +58,6 @@ void setTargetCPU(mlir::ModuleOp mod, llvm::StringRef cpu); /// Get the target CPU string from the Module or return a null reference. llvm::StringRef getTargetCPU(mlir::ModuleOp mod); -/// Sets whether Denormal Mode can be ignored or not for lowering of floating -/// point atomic operations. -void setAtomicIgnoreDenormalMode(mlir::ModuleOp mod, bool value); -/// Gets whether Denormal Mode can be ignored or not for lowering of floating -/// point atomic operations. -bool getAtomicIgnoreDenormalMode(mlir::ModuleOp mod); -/// Sets whether fine grained memory can be used or not for lowering of atomic -/// operations. -void setAtomicFineGrainedMemory(mlir::ModuleOp mod, bool value); -/// Gets whether fine grained memory can be used or not for lowering of atomic -/// operations. -bool getAtomicFineGrainedMemory(mlir::ModuleOp mod); -/// Sets whether remote memory can be used or not for lowering of atomic -/// operations. -void setAtomicRemoteMemory(mlir::ModuleOp mod, bool value); -/// Gets whether remote memory can be used or not for lowering of atomic -/// operations. -bool getAtomicRemoteMemory(mlir::ModuleOp mod); - /// Set the tune CPU for the module. `cpu` must not be deallocated while /// module `mod` is still live. void setTuneCPU(mlir::ModuleOp mod, llvm::StringRef cpu); diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 111c5aa48726f..f55d866435997 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -512,16 +512,6 @@ static void parseTargetArgs(TargetOptions &opts, llvm::opt::ArgList &args) { args.getLastArg(clang::driver::options::OPT_triple)) opts.triple = a->getValue(); - opts.atomicIgnoreDenormalMode = args.hasFlag( - clang::driver::options::OPT_fatomic_ignore_denormal_mode, - clang::driver::options::OPT_fno_atomic_ignore_denormal_mode, false); - opts.atomicFineGrainedMemory = args.hasFlag( - clang::driver::options::OPT_fatomic_fine_grained_memory, - clang::driver::options::OPT_fno_atomic_fine_grained_memory, false); - opts.atomicRemoteMemory = - args.hasFlag(clang::driver::options::OPT_fatomic_remote_memory, - clang::driver::options::OPT_fno_atomic_remote_memory, false); - if (const llvm::opt::Arg *a = args.getLastArg(clang::driver::options::OPT_target_cpu)) opts.cpu = a->getValue(); diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index ac3669c907fbc..92aae792248c5 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -6733,10 +6733,6 @@ Fortran::lower::LoweringBridge::LoweringBridge( fir::setKindMapping(*module, kindMap); fir::setTargetCPU(*module, targetMachine.getTargetCPU()); fir::setTuneCPU(*module, targetOpts.cpuToTuneFor); - fir::setAtomicIgnoreDenormalMode(*module, - targetOpts.atomicIgnoreDenormalMode); - fir::setAtomicFineGrainedMemory(*module, targetOpts.atomicFineGrainedMemory); - fir::setAtomicRemoteMemory(*module, targetOpts.atomicRemoteMemory); fir::setTargetFeatures(*module, targetMachine.getTargetFeatureString()); fir::support::setMLIRDataLayout(*module, targetMachine.createDataLayout()); fir::setIdent(*module, Fortran::common::getFlangFullVersion()); diff --git a/flang/lib/Lower/OpenMP/Atomic.cpp b/flang/lib/Lower/OpenMP/Atomic.cpp index d4f83f57bd5d4..9a233d2d8cb08 100644 --- a/flang/lib/Lower/OpenMP/Atomic.cpp +++ b/flang/lib/Lower/OpenMP/Atomic.cpp @@ -635,16 +635,9 @@ genAtomicUpdate(lower::AbstractConverter &converter, } } - mlir::ModuleOp module = builder.getModule(); - mlir::omp::AtomicControlAttr atomicControlAttr = - mlir::omp::AtomicControlAttr::get( - builder.getContext(), fir::getAtomicIgnoreDenormalMode(module), - fir::getAtomicFineGrainedMemory(module), - fir::getAtomicRemoteMemory(module)); builder.restoreInsertionPoint(atomicAt); auto updateOp = mlir::omp::AtomicUpdateOp::create( - builder, loc, atomAddr, atomicControlAttr, hint, - makeMemOrderAttr(converter, memOrder)); + builder, loc, atomAddr, hint, makeMemOrderAttr(converter, memOrder)); mlir::Region ®ion = updateOp->getRegion(0); mlir::Block *block = builder.createBlock(®ion, {}, {atomType}, {loc}); diff --git a/flang/lib/Optimizer/Dialect/Support/FIRContext.cpp b/flang/lib/Optimizer/Dialect/Support/FIRContext.cpp index c2e0afe122b4e..01c0be66d1ecc 100644 --- a/flang/lib/Optimizer/Dialect/Support/FIRContext.cpp +++ b/flang/lib/Optimizer/Dialect/Support/FIRContext.cpp @@ -88,57 +88,6 @@ void fir::setTuneCPU(mlir::ModuleOp mod, llvm::StringRef cpu) { mod->setAttr(tuneCpuName, mlir::StringAttr::get(ctx, cpu)); } -static constexpr const char *atomicIgnoreDenormalModeName = - "fir.atomic_ignore_denormal_mode"; - -void fir::setAtomicIgnoreDenormalMode(mlir::ModuleOp mod, bool value) { - if (value) { - auto *ctx = mod.getContext(); - mod->setAttr(atomicIgnoreDenormalModeName, mlir::UnitAttr::get(ctx)); - } else { - if (mod->hasAttr(atomicIgnoreDenormalModeName)) - mod->removeAttr(atomicIgnoreDenormalModeName); - } -} - -bool fir::getAtomicIgnoreDenormalMode(mlir::ModuleOp mod) { - return mod->hasAttr(atomicIgnoreDenormalModeName); -} - -static constexpr const char *atomicFineGrainedMemoryName = - "fir.atomic_fine_grained_memory"; - -void fir::setAtomicFineGrainedMemory(mlir::ModuleOp mod, bool value) { - if (value) { - auto *ctx = mod.getContext(); - mod->setAttr(atomicFineGrainedMemoryName, mlir::UnitAttr::get(ctx)); - } else { - if (mod->hasAttr(atomicFineGrainedMemoryName)) - mod->removeAttr(atomicFineGrainedMemoryName); - } -} - -bool fir::getAtomicFineGrainedMemory(mlir::ModuleOp mod) { - return mod->hasAttr(atomicFineGrainedMemoryName); -} - -static constexpr const char *atomicRemoteMemoryName = - "fir.atomic_remote_memory"; - -void fir::setAtomicRemoteMemory(mlir::ModuleOp mod, bool value) { - if (value) { - auto *ctx = mod.getContext(); - mod->setAttr(atomicRemoteMemoryName, mlir::UnitAttr::get(ctx)); - } else { - if (mod->hasAttr(atomicRemoteMemoryName)) - mod->removeAttr(atomicRemoteMemoryName); - } -} - -bool fir::getAtomicRemoteMemory(mlir::ModuleOp mod) { - return mod->hasAttr(atomicRemoteMemoryName); -} - llvm::StringRef fir::getTuneCPU(mlir::ModuleOp mod) { if (auto attr = mod->getAttrOfType<mlir::StringAttr>(tuneCpuName)) return attr.getValue(); diff --git a/flang/test/Lower/OpenMP/atomic-control-options.f90 b/flang/test/Lower/OpenMP/atomic-control-options.f90 deleted file mode 100644 index 8f86a151b3713..0000000000000 --- a/flang/test/Lower/OpenMP/atomic-control-options.f90 +++ /dev/null @@ -1,37 +0,0 @@ -! RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-device -munsafe-fp-atomics %s -o - | FileCheck -check-prefix=UNSAFE-FP-ATOMICS %s -! RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-device -fatomic-ignore-denormal-mode %s -o - | FileCheck -check-prefix=IGNORE-DENORMAL %s -! RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-device -fatomic-fine-grained-memory %s -o - | FileCheck -check-prefix=FINE-GRAINED-MEMORY %s -! RUN: %flang_fc1 -emit-hlfir -triple amdgcn-amd-amdhsa -fopenmp -fopenmp-is-device -fatomic-remote-memory %s -o - | FileCheck -check-prefix=REMOTE-MEMORY %s -program test - implicit none - integer :: A, B, threads - threads = 128 - A = 0 - B = 0 - !UNSAFE-FP-ATOMICS: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>} - !IGNORE-DENORMAL: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>} - !FINE-GRAINED-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<fine_grained_memory = true>} - !REMOTE-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<remote_memory = true>} - !$omp target parallel num_threads(threads) - !$omp atomic - A = A + 1 - !$omp end target parallel - !UNSAFE-FP-ATOMICS: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>} - !IGNORE-DENORMAL: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>} - !FINE-GRAINED-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<fine_grained_memory = true>} - !REMOTE-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> { - !REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<remote_memory = true>} - !$omp target parallel num_threads(threads) - !$omp atomic capture - A = A + B - B = A - !$omp end atomic - !$omp end target parallel -end program test diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td index 72ce4c6a21cb3..704d0b2220e8a 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td @@ -22,21 +22,6 @@ class OpenMP_Attr<string name, string attrMnemonic, list<Trait> traits = [], let mnemonic = attrMnemonic; } -//===----------------------------------------------------------------------===// -// AtomicControlAttr -//===----------------------------------------------------------------------===// - -// Atomic control attributes hold information about architectural -// characteristics which are required for lowering atomic operations. -def AtomicControlAttr : OpenMP_Attr<"AtomicControl", "atomic_control"> { - let parameters = - (ins DefaultValuedParameter<"bool", "false">:$ignore_denormal_mode, - DefaultValuedParameter<"bool", "false">:$fine_grained_memory, - DefaultValuedParameter<"bool", "false">:$remote_memory); - - let assemblyFormat = "`<` struct(params) `>`"; -} - //===----------------------------------------------------------------------===// // DeclareTargetAttr //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td index be114ea4fb631..8cf18b43450ab 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td @@ -1750,11 +1750,9 @@ def AtomicUpdateOp : OpenMP_Op<"atomic.update", traits = [ operations. }] # clausesDescription; - let arguments = !con( - (ins Arg<OpenMP_PointerLikeType, - "Address of variable to be updated", [MemRead, MemWrite]>:$x, - OptionalAttr<AtomicControlAttr>:$atomic_control), - clausesArgs); + let arguments = !con((ins Arg<OpenMP_PointerLikeType, + "Address of variable to be updated", + [MemRead, MemWrite]>:$x), clausesArgs); // Override region definition. let regions = (region SizedRegion<1>:$region); diff --git a/mlir/test/Dialect/OpenMP/ops.mlir b/mlir/test/Dialect/OpenMP/ops.mlir index 8c846cde1a3ca..4c50ed3230976 100644 --- a/mlir/test/Dialect/OpenMP/ops.mlir +++ b/mlir/test/Dialect/OpenMP/ops.mlir @@ -1406,7 +1406,7 @@ func.func @omp_atomic_update(%x : memref<i32>, %expr : i32, %xBool : memref<i1>, // CHECK-NEXT: (%[[XVAL:.*]]: i1): // CHECK-NEXT: %[[NEWVAL:.*]] = llvm.icmp "eq" %[[XVAL]], %[[EXPRBOOL]] : i1 // CHECK-NEXT: omp.yield(%[[NEWVAL]] : i1) - // CHECK-NEXT: } + // } omp.atomic.update %xBool : memref<i1> { ^bb0(%xval: i1): %newval = llvm.icmp "eq" %xval, %exprBool : i1 @@ -1562,14 +1562,6 @@ func.func @omp_atomic_update(%x : memref<i32>, %expr : i32, %xBool : memref<i1>, omp.yield(%newval : i32) } - // CHECK: omp.atomic.update %[[X]] : memref<i32> { - // CHECK-NEXT: (%[[XVAL:.*]]: i32): - // CHECK-NEXT: omp.yield(%{{.+}} : i32) - // CHECK-NEXT: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true, fine_grained_memory = true, remote_memory = true>} - omp.atomic.update %x : memref<i32> { - ^bb0(%xval:i32): - omp.yield(%const:i32) - } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true, fine_grained_memory = true, remote_memory = true>} return } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits