-
Notifications
You must be signed in to change notification settings - Fork 14.7k
Revert "[flang][flang-driver][mlir][OpenMP] atomic control support" #150504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revert "[flang][flang-driver][mlir][OpenMP] atomic control support" #150504
Conversation
@llvm/pr-subscribers-mlir-openmp @llvm/pr-subscribers-flang-driver Author: Kiran Chandramohan (kiranchandramohan) ChangesReverts llvm/llvm-project#143441 Reverting due to CI failure https://lab.llvm.org/buildbot/#/builders/53/builds/18055. Full diff: https://github.com/llvm/llvm-project/pull/150504.diff 11 Files Affected:
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/pr-subscribers-flang-fir-hlfir Author: Kiran Chandramohan (kiranchandramohan) ChangesReverts llvm/llvm-project#143441 Reverting due to CI failure https://lab.llvm.org/buildbot/#/builders/53/builds/18055. Full diff: https://github.com/llvm/llvm-project/pull/150504.diff 11 Files Affected:
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
}
|
Reversion might be overkill. Maybe the test can just be disabled with an |
Thank you for the revert. I was away and couldn't revert it. Will take a look when I am back. |
I imagine we could fix the problem by removing the |
…lvm#150504) Reverts llvm#143441 Reverting due to CI failure https://lab.llvm.org/buildbot/#/builders/53/builds/18055.
Reverts #143441
Reverting due to CI failure https://lab.llvm.org/buildbot/#/builders/53/builds/18055.