[llvm-branch-commits] [flang] 32c9e86 - Revert "[flang][flang-driver][mlir][OpenMP] atomic control support (#143441)"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Jul 24 12:33:46 PDT 2025


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 &region = updateOp->getRegion(0);
   mlir::Block *block = builder.createBlock(&region, {}, {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
 }
 


        


More information about the llvm-branch-commits mailing list