Skip to content

Commit fe9a702

Browse files
committed
R4: Addressing review comments
1 parent 0b6fd84 commit fe9a702

File tree

9 files changed

+60
-64
lines changed

9 files changed

+60
-64
lines changed

flang/include/flang/Frontend/TargetOptions.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ class TargetOptions {
5555
bool asmVerbose = false;
5656

5757
/// Atomic control options for AMD gpu
58-
bool amdgpuIgnoreDenormalMode = false;
59-
bool amdgpuRemoteMemory = false;
60-
bool amdgpuFineGrainedMemory = false;
58+
bool ignoreDenormalMode = false;
59+
bool remoteMemory = false;
60+
bool fineGrainedMemory = false;
6161
};
6262

6363
} // end namespace Fortran::frontend

flang/include/flang/Optimizer/Dialect/Support/FIRContext.h

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,17 @@ void setTargetCPU(mlir::ModuleOp mod, llvm::StringRef cpu);
5959
llvm::StringRef getTargetCPU(mlir::ModuleOp mod);
6060

6161
// Setters and getters for atomic control options.
62-
void setAmdgpuIgnoreDenormalMode(mlir::ModuleOp mod);
63-
bool getAmdgpuIgnoreDenormalMode(mlir::ModuleOp mod);
64-
void setAmdgpuFineGrainedMemory(mlir::ModuleOp mod);
65-
bool getAmdgpuFineGrainedMemory(mlir::ModuleOp mod);
66-
void setAmdgpuRemoteMemory(mlir::ModuleOp mod);
67-
bool getAmdgpuRemoteMemory(mlir::ModuleOp mod);
62+
void setIgnoreDenormalMode(mlir::ModuleOp mod);
63+
bool getIgnoreDenormalMode(mlir::ModuleOp mod);
64+
void setFineGrainedMemory(mlir::ModuleOp mod);
65+
bool getFineGrainedMemory(mlir::ModuleOp mod);
66+
void setRemoteMemory(mlir::ModuleOp mod);
67+
bool getRemoteMemory(mlir::ModuleOp mod);
6868

6969
/// Set the tune CPU for the module. `cpu` must not be deallocated while
7070
/// module `mod` is still live.
7171
void setTuneCPU(mlir::ModuleOp mod, llvm::StringRef cpu);
7272

73-
// set atomic control options for AMD gpu.
74-
void setAmdgpuAtomicControlOptions(mlir::ModuleOp mod,
75-
bool amdgpuIgnoreDenormalMode,
76-
bool amdgpuNoFineGrainedMemory,
77-
bool amdgpuNoRemoteMemory);
78-
7973
/// Get the tune CPU string from the Module or return a null reference.
8074
llvm::StringRef getTuneCPU(mlir::ModuleOp mod);
8175

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -495,17 +495,15 @@ static void parseTargetArgs(TargetOptions &opts, llvm::opt::ArgList &args) {
495495
args.getLastArg(clang::driver::options::OPT_triple))
496496
opts.triple = a->getValue();
497497

498-
if (llvm::Triple(opts.triple).isAMDGPU()) {
499-
opts.amdgpuIgnoreDenormalMode = args.hasFlag(
500-
clang::driver::options::OPT_fatomic_ignore_denormal_mode,
501-
clang::driver::options::OPT_fno_atomic_ignore_denormal_mode, false);
502-
opts.amdgpuFineGrainedMemory = args.hasFlag(
503-
clang::driver::options::OPT_fatomic_fine_grained_memory,
504-
clang::driver::options::OPT_fno_atomic_fine_grained_memory, false);
505-
opts.amdgpuRemoteMemory = args.hasFlag(
506-
clang::driver::options::OPT_fatomic_remote_memory,
507-
clang::driver::options::OPT_fno_atomic_remote_memory, false);
508-
}
498+
opts.ignoreDenormalMode = args.hasFlag(
499+
clang::driver::options::OPT_fatomic_ignore_denormal_mode,
500+
clang::driver::options::OPT_fno_atomic_ignore_denormal_mode, false);
501+
opts.fineGrainedMemory = args.hasFlag(
502+
clang::driver::options::OPT_fatomic_fine_grained_memory,
503+
clang::driver::options::OPT_fno_atomic_fine_grained_memory, false);
504+
opts.remoteMemory =
505+
args.hasFlag(clang::driver::options::OPT_fatomic_remote_memory,
506+
clang::driver::options::OPT_fno_atomic_remote_memory, false);
509507

510508
if (const llvm::opt::Arg *a =
511509
args.getLastArg(clang::driver::options::OPT_target_cpu))

flang/lib/Lower/Bridge.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6654,12 +6654,12 @@ Fortran::lower::LoweringBridge::LoweringBridge(
66546654
fir::setKindMapping(*module, kindMap);
66556655
fir::setTargetCPU(*module, targetMachine.getTargetCPU());
66566656
fir::setTuneCPU(*module, targetOpts.cpuToTuneFor);
6657-
if (targetOpts.amdgpuIgnoreDenormalMode)
6658-
fir::setAmdgpuIgnoreDenormalMode(*module);
6659-
if (targetOpts.amdgpuFineGrainedMemory)
6660-
fir::setAmdgpuFineGrainedMemory(*module);
6661-
if (targetOpts.amdgpuRemoteMemory)
6662-
fir::setAmdgpuRemoteMemory(*module);
6657+
if (targetOpts.ignoreDenormalMode)
6658+
fir::setIgnoreDenormalMode(*module);
6659+
if (targetOpts.fineGrainedMemory)
6660+
fir::setFineGrainedMemory(*module);
6661+
if (targetOpts.remoteMemory)
6662+
fir::setRemoteMemory(*module);
66636663
fir::setTargetFeatures(*module, targetMachine.getTargetFeatureString());
66646664
fir::support::setMLIRDataLayout(*module, targetMachine.createDataLayout());
66656665
fir::setIdent(*module, Fortran::common::getFlangFullVersion());

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2979,9 +2979,15 @@ genAtomicUpdate(lower::AbstractConverter &converter,
29792979
}
29802980
}
29812981

2982+
mlir::ModuleOp module = builder.getModule();
2983+
mlir::omp::AtomicControlAttr atomicControlAttr =
2984+
mlir::omp::AtomicControlAttr::get(
2985+
builder.getContext(), fir::getIgnoreDenormalMode(module),
2986+
fir::getFineGrainedMemory(module), fir::getRemoteMemory(module));
29822987
builder.restoreInsertionPoint(atomicAt);
29832988
auto updateOp = builder.create<mlir::omp::AtomicUpdateOp>(
2984-
loc, atomAddr, hint, makeMemOrderAttr(converter, memOrder));
2989+
loc, atomAddr, atomicControlAttr, hint,
2990+
makeMemOrderAttr(converter, memOrder));
29852991

29862992
mlir::Region &region = updateOp->getRegion(0);
29872993
mlir::Block *block = builder.createBlock(&region, {}, {atomType}, {loc});

flang/lib/Optimizer/Dialect/Support/FIRContext.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -88,36 +88,34 @@ void fir::setTuneCPU(mlir::ModuleOp mod, llvm::StringRef cpu) {
8888
mod->setAttr(tuneCpuName, mlir::StringAttr::get(ctx, cpu));
8989
}
9090

91-
static constexpr const char *amdgpuIgnoreDenormalModeName =
92-
"fir.amdgpu.ignore.denormal.mode";
93-
void fir::setAmdgpuIgnoreDenormalMode(mlir::ModuleOp mod) {
91+
static constexpr const char *ignoreDenormalModeName =
92+
"fir.ignore.denormal.mode";
93+
void fir::setIgnoreDenormalMode(mlir::ModuleOp mod) {
9494
auto *ctx = mod.getContext();
95-
mod->setAttr(amdgpuIgnoreDenormalModeName, mlir::UnitAttr::get(ctx));
95+
mod->setAttr(ignoreDenormalModeName, mlir::UnitAttr::get(ctx));
9696
}
9797

98-
bool fir::getAmdgpuIgnoreDenormalMode(mlir::ModuleOp mod) {
99-
return mod->hasAttrOfType<mlir::UnitAttr>(amdgpuIgnoreDenormalModeName);
98+
bool fir::getIgnoreDenormalMode(mlir::ModuleOp mod) {
99+
return mod->hasAttrOfType<mlir::UnitAttr>(ignoreDenormalModeName);
100100
}
101101

102-
static constexpr const char *amdgpuFineGrainedMemoryName =
103-
"fir.amdgpu.fine.grained.memory";
104-
void fir::setAmdgpuFineGrainedMemory(mlir::ModuleOp mod) {
102+
static constexpr const char *fineGrainedMemoryName = "fir.fine.grained.memory";
103+
void fir::setFineGrainedMemory(mlir::ModuleOp mod) {
105104
auto *ctx = mod.getContext();
106-
mod->setAttr(amdgpuFineGrainedMemoryName, mlir::UnitAttr::get(ctx));
105+
mod->setAttr(fineGrainedMemoryName, mlir::UnitAttr::get(ctx));
107106
}
108107

109-
bool fir::getAmdgpuFineGrainedMemory(mlir::ModuleOp mod) {
110-
return mod->hasAttrOfType<mlir::UnitAttr>(amdgpuFineGrainedMemoryName);
108+
bool fir::getFineGrainedMemory(mlir::ModuleOp mod) {
109+
return mod->hasAttrOfType<mlir::UnitAttr>(fineGrainedMemoryName);
111110
}
112-
static constexpr const char *amdgpuRemoteMemoryName =
113-
"fir.amdgpu.remote.memory";
114-
void fir::setAmdgpuRemoteMemory(mlir::ModuleOp mod) {
111+
static constexpr const char *remoteMemoryName = "fir.remote.memory";
112+
void fir::setRemoteMemory(mlir::ModuleOp mod) {
115113
auto *ctx = mod.getContext();
116-
mod->setAttr(amdgpuRemoteMemoryName, mlir::UnitAttr::get(ctx));
114+
mod->setAttr(remoteMemoryName, mlir::UnitAttr::get(ctx));
117115
}
118116

119-
bool fir::getAmdgpuRemoteMemory(mlir::ModuleOp mod) {
120-
return mod->hasAttrOfType<mlir::UnitAttr>(amdgpuRemoteMemoryName);
117+
bool fir::getRemoteMemory(mlir::ModuleOp mod) {
118+
return mod->hasAttrOfType<mlir::UnitAttr>(remoteMemoryName);
121119
}
122120

123121
llvm::StringRef fir::getTuneCPU(mlir::ModuleOp mod) {

flang/test/Lower/OpenMP/atomic-control-options.f90

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,25 @@ program test
99
A = 0
1010
B = 0
1111
!UNSAFE-FP-ATOMICS: omp.atomic.update %{{.*}} : !fir.ref<i32> {
12-
!UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true>}
12+
!UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>}
1313
!IGNORE-DENORMAL: omp.atomic.update %{{.*}} : !fir.ref<i32> {
14-
!IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true>}
14+
!IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>}
1515
!FINE-GRAINED-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> {
16-
!FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<amdgpu_fine_grained_memory = true>}
16+
!FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<fine_grained_memory = true>}
1717
!REMOTE-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> {
18-
!REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<amdgpu_remote_memory = true>}
18+
!REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<remote_memory = true>}
1919
!$omp target parallel num_threads(threads)
2020
!$omp atomic
2121
A = A + 1
2222
!$omp end target parallel
2323
!UNSAFE-FP-ATOMICS: omp.atomic.update %{{.*}} : !fir.ref<i32> {
24-
!UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true>}
24+
!UNSAFE-FP-ATOMICS: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>}
2525
!IGNORE-DENORMAL: omp.atomic.update %{{.*}} : !fir.ref<i32> {
26-
!IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true>}
26+
!IGNORE-DENORMAL: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true>}
2727
!FINE-GRAINED-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> {
28-
!FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<amdgpu_fine_grained_memory = true>}
28+
!FINE-GRAINED-MEMORY: } {atomic_control = #omp.atomic_control<fine_grained_memory = true>}
2929
!REMOTE-MEMORY: omp.atomic.update %{{.*}} : !fir.ref<i32> {
30-
!REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<amdgpu_remote_memory = true>}
30+
!REMOTE-MEMORY: } {atomic_control = #omp.atomic_control<remote_memory = true>}
3131
!$omp target parallel num_threads(threads)
3232
!$omp atomic capture
3333
A = A + B

mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ def FlagsAttr : OpenMP_Attr<"Flags", "flags"> {
6262
// characteristics which are required for lowering atomic operations.
6363
def AtomicControlAttr : OpenMP_Attr<"AtomicControl", "atomic_control"> {
6464
let parameters =
65-
(ins DefaultValuedParameter<"bool", "false">:$amdgpu_ignore_denormal_mode,
66-
DefaultValuedParameter<"bool", "false">:$amdgpu_fine_grained_memory,
67-
DefaultValuedParameter<"bool", "false">:$amdgpu_remote_memory);
65+
(ins DefaultValuedParameter<"bool", "false">:$ignore_denormal_mode,
66+
DefaultValuedParameter<"bool", "false">:$fine_grained_memory,
67+
DefaultValuedParameter<"bool", "false">:$remote_memory);
6868

6969
let assemblyFormat = "`<` struct(params) `>`";
7070
}

mlir/test/Dialect/OpenMP/ops.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,11 +1565,11 @@ func.func @omp_atomic_update(%x : memref<i32>, %expr : i32, %xBool : memref<i1>,
15651565
// CHECK: omp.atomic.update %[[X]] : memref<i32> {
15661566
// CHECK-NEXT: (%[[XVAL:.*]]: i32):
15671567
// CHECK-NEXT: omp.yield(%{{.+}} : i32)
1568-
// CHECK-NEXT: } {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true, amdgpu_fine_grained_memory = true, amdgpu_remote_memory = true>}
1568+
// CHECK-NEXT: } {atomic_control = #omp.atomic_control<ignore_denormal_mode = true, fine_grained_memory = true, remote_memory = true>}
15691569
omp.atomic.update %x : memref<i32> {
15701570
^bb0(%xval:i32):
15711571
omp.yield(%const:i32)
1572-
} {atomic_control = #omp.atomic_control<amdgpu_ignore_denormal_mode = true, amdgpu_fine_grained_memory = true, amdgpu_remote_memory = true>}
1572+
} {atomic_control = #omp.atomic_control<ignore_denormal_mode = true, fine_grained_memory = true, remote_memory = true>}
15731573
return
15741574
}
15751575

0 commit comments

Comments
 (0)