Skip to content

Commit 29d50d7

Browse files
committed
Revert " [flang][OMPIRBuilder][MLIR][llvm] Backend support for atomic control options (llvm#151579)"
This reverts commit 38542ef.
1 parent 75cc77e commit 29d50d7

File tree

6 files changed

+15
-165
lines changed

6 files changed

+15
-165
lines changed

flang/test/Driver/atomic-control-options.f90

Lines changed: 0 additions & 20 deletions
This file was deleted.

llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3286,8 +3286,7 @@ class OpenMPIRBuilder {
32863286
emitAtomicUpdate(InsertPointTy AllocaIP, Value *X, Type *XElemTy, Value *Expr,
32873287
AtomicOrdering AO, AtomicRMWInst::BinOp RMWOp,
32883288
AtomicUpdateCallbackTy &UpdateOp, bool VolatileX,
3289-
bool IsXBinopExpr, bool IsIgnoreDenormalMode,
3290-
bool IsFineGrainedMemory, bool IsRemoteMemory);
3289+
bool IsXBinopExpr);
32913290

32923291
/// Emit the binary op. described by \p RMWOp, using \p Src1 and \p Src2 .
32933292
///
@@ -3360,9 +3359,7 @@ class OpenMPIRBuilder {
33603359
LLVM_ABI InsertPointOrErrorTy createAtomicUpdate(
33613360
const LocationDescription &Loc, InsertPointTy AllocaIP, AtomicOpValue &X,
33623361
Value *Expr, AtomicOrdering AO, AtomicRMWInst::BinOp RMWOp,
3363-
AtomicUpdateCallbackTy &UpdateOp, bool IsXBinopExpr,
3364-
bool IsIgnoreDenormalMode = false, bool IsFineGrainedMemory = false,
3365-
bool IsRemoteMemory = false);
3362+
AtomicUpdateCallbackTy &UpdateOp, bool IsXBinopExpr);
33663363

33673364
/// Emit atomic update for constructs: --- Only Scalar data types
33683365
/// V = X; X = X BinOp Expr ,
@@ -3397,9 +3394,7 @@ class OpenMPIRBuilder {
33973394
const LocationDescription &Loc, InsertPointTy AllocaIP, AtomicOpValue &X,
33983395
AtomicOpValue &V, Value *Expr, AtomicOrdering AO,
33993396
AtomicRMWInst::BinOp RMWOp, AtomicUpdateCallbackTy &UpdateOp,
3400-
bool UpdateExpr, bool IsPostfixUpdate, bool IsXBinopExpr,
3401-
bool IsIgnoreDenormalMode = false, bool IsFineGrainedMemory = false,
3402-
bool IsRemoteMemory = false);
3397+
bool UpdateExpr, bool IsPostfixUpdate, bool IsXBinopExpr);
34033398

34043399
/// Emit atomic compare for constructs: --- Only scalar data types
34053400
/// cond-expr-stmt:

llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8956,8 +8956,7 @@ OpenMPIRBuilder::createAtomicWrite(const LocationDescription &Loc,
89568956
OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createAtomicUpdate(
89578957
const LocationDescription &Loc, InsertPointTy AllocaIP, AtomicOpValue &X,
89588958
Value *Expr, AtomicOrdering AO, AtomicRMWInst::BinOp RMWOp,
8959-
AtomicUpdateCallbackTy &UpdateOp, bool IsXBinopExpr,
8960-
bool IsIgnoreDenormalMode, bool IsFineGrainedMemory, bool IsRemoteMemory) {
8959+
AtomicUpdateCallbackTy &UpdateOp, bool IsXBinopExpr) {
89618960
assert(!isConflictIP(Loc.IP, AllocaIP) && "IPs must not be ambiguous");
89628961
if (!updateToLocation(Loc))
89638962
return Loc.IP;
@@ -8975,9 +8974,9 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createAtomicUpdate(
89758974
"OpenMP atomic does not support LT or GT operations");
89768975
});
89778976

8978-
Expected<std::pair<Value *, Value *>> AtomicResult = emitAtomicUpdate(
8979-
AllocaIP, X.Var, X.ElemTy, Expr, AO, RMWOp, UpdateOp, X.IsVolatile,
8980-
IsXBinopExpr, IsIgnoreDenormalMode, IsFineGrainedMemory, IsRemoteMemory);
8977+
Expected<std::pair<Value *, Value *>> AtomicResult =
8978+
emitAtomicUpdate(AllocaIP, X.Var, X.ElemTy, Expr, AO, RMWOp, UpdateOp,
8979+
X.IsVolatile, IsXBinopExpr);
89818980
if (!AtomicResult)
89828981
return AtomicResult.takeError();
89838982
checkAndEmitFlushAfterAtomic(Loc, AO, AtomicKind::Update);
@@ -9024,8 +9023,7 @@ Value *OpenMPIRBuilder::emitRMWOpAsInstruction(Value *Src1, Value *Src2,
90249023
Expected<std::pair<Value *, Value *>> OpenMPIRBuilder::emitAtomicUpdate(
90259024
InsertPointTy AllocaIP, Value *X, Type *XElemTy, Value *Expr,
90269025
AtomicOrdering AO, AtomicRMWInst::BinOp RMWOp,
9027-
AtomicUpdateCallbackTy &UpdateOp, bool VolatileX, bool IsXBinopExpr,
9028-
bool IsIgnoreDenormalMode, bool IsFineGrainedMemory, bool IsRemoteMemory) {
9026+
AtomicUpdateCallbackTy &UpdateOp, bool VolatileX, bool IsXBinopExpr) {
90299027
// TODO: handle the case where XElemTy is not byte-sized or not a power of 2
90309028
// or a complex datatype.
90319029
bool emitRMWOp = false;
@@ -9048,20 +9046,7 @@ Expected<std::pair<Value *, Value *>> OpenMPIRBuilder::emitAtomicUpdate(
90489046

90499047
std::pair<Value *, Value *> Res;
90509048
if (emitRMWOp) {
9051-
AtomicRMWInst *RMWInst =
9052-
Builder.CreateAtomicRMW(RMWOp, X, Expr, llvm::MaybeAlign(), AO);
9053-
if (T.isAMDGPU()) {
9054-
if (IsIgnoreDenormalMode)
9055-
RMWInst->setMetadata("amdgpu.ignore.denormal.mode",
9056-
llvm::MDNode::get(Builder.getContext(), {}));
9057-
if (!IsFineGrainedMemory)
9058-
RMWInst->setMetadata("amdgpu.no.fine.grained.memory",
9059-
llvm::MDNode::get(Builder.getContext(), {}));
9060-
if (!IsRemoteMemory)
9061-
RMWInst->setMetadata("amdgpu.no.remote.memory",
9062-
llvm::MDNode::get(Builder.getContext(), {}));
9063-
}
9064-
Res.first = RMWInst;
9049+
Res.first = Builder.CreateAtomicRMW(RMWOp, X, Expr, llvm::MaybeAlign(), AO);
90659050
// not needed except in case of postfix captures. Generate anyway for
90669051
// consistency with the else part. Will be removed with any DCE pass.
90679052
// AtomicRMWInst::Xchg does not have a coressponding instruction.
@@ -9193,8 +9178,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createAtomicCapture(
91939178
const LocationDescription &Loc, InsertPointTy AllocaIP, AtomicOpValue &X,
91949179
AtomicOpValue &V, Value *Expr, AtomicOrdering AO,
91959180
AtomicRMWInst::BinOp RMWOp, AtomicUpdateCallbackTy &UpdateOp,
9196-
bool UpdateExpr, bool IsPostfixUpdate, bool IsXBinopExpr,
9197-
bool IsIgnoreDenormalMode, bool IsFineGrainedMemory, bool IsRemoteMemory) {
9181+
bool UpdateExpr, bool IsPostfixUpdate, bool IsXBinopExpr) {
91989182
if (!updateToLocation(Loc))
91999183
return Loc.IP;
92009184

@@ -9213,9 +9197,9 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createAtomicCapture(
92139197
// If UpdateExpr is 'x' updated with some `expr` not based on 'x',
92149198
// 'x' is simply atomically rewritten with 'expr'.
92159199
AtomicRMWInst::BinOp AtomicOp = (UpdateExpr ? RMWOp : AtomicRMWInst::Xchg);
9216-
Expected<std::pair<Value *, Value *>> AtomicResult = emitAtomicUpdate(
9217-
AllocaIP, X.Var, X.ElemTy, Expr, AO, AtomicOp, UpdateOp, X.IsVolatile,
9218-
IsXBinopExpr, IsIgnoreDenormalMode, IsFineGrainedMemory, IsRemoteMemory);
9200+
Expected<std::pair<Value *, Value *>> AtomicResult =
9201+
emitAtomicUpdate(AllocaIP, X.Var, X.ElemTy, Expr, AO, AtomicOp, UpdateOp,
9202+
X.IsVolatile, IsXBinopExpr);
92199203
if (!AtomicResult)
92209204
return AtomicResult.takeError();
92219205
Value *CapturedVal =

mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3205,23 +3205,6 @@ llvm::AtomicRMWInst::BinOp convertBinOpToAtomic(Operation &op) {
32053205
.Default(llvm::AtomicRMWInst::BinOp::BAD_BINOP);
32063206
}
32073207

3208-
void extractAtomicControlFlags(omp::AtomicUpdateOp atomicUpdateOp,
3209-
bool &isIgnoreDenormalMode,
3210-
bool &isFineGrainedMemory,
3211-
bool &isRemoteMemory) {
3212-
isIgnoreDenormalMode = false;
3213-
isFineGrainedMemory = false;
3214-
isRemoteMemory = false;
3215-
if (atomicUpdateOp &&
3216-
atomicUpdateOp->hasAttr(atomicUpdateOp.getAtomicControlAttrName())) {
3217-
mlir::omp::AtomicControlAttr atomicControlAttr =
3218-
atomicUpdateOp.getAtomicControlAttr();
3219-
isIgnoreDenormalMode = atomicControlAttr.getIgnoreDenormalMode();
3220-
isFineGrainedMemory = atomicControlAttr.getFineGrainedMemory();
3221-
isRemoteMemory = atomicControlAttr.getRemoteMemory();
3222-
}
3223-
}
3224-
32253208
/// Converts an OpenMP atomic update operation using OpenMPIRBuilder.
32263209
static LogicalResult
32273210
convertOmpAtomicUpdate(omp::AtomicUpdateOp &opInst,
@@ -3286,19 +3269,13 @@ convertOmpAtomicUpdate(omp::AtomicUpdateOp &opInst,
32863269
return moduleTranslation.lookupValue(yieldop.getResults()[0]);
32873270
};
32883271

3289-
bool isIgnoreDenormalMode;
3290-
bool isFineGrainedMemory;
3291-
bool isRemoteMemory;
3292-
extractAtomicControlFlags(opInst, isIgnoreDenormalMode, isFineGrainedMemory,
3293-
isRemoteMemory);
32943272
// Handle ambiguous alloca, if any.
32953273
auto allocaIP = findAllocaInsertPoint(builder, moduleTranslation);
32963274
llvm::OpenMPIRBuilder::LocationDescription ompLoc(builder);
32973275
llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP =
32983276
ompBuilder->createAtomicUpdate(ompLoc, allocaIP, llvmAtomicX, llvmExpr,
32993277
atomicOrdering, binop, updateFn,
3300-
isXBinopExpr, isIgnoreDenormalMode,
3301-
isFineGrainedMemory, isRemoteMemory);
3278+
isXBinopExpr);
33023279

33033280
if (failed(handleError(afterIP, *opInst)))
33043281
return failure();
@@ -3387,19 +3364,13 @@ convertOmpAtomicCapture(omp::AtomicCaptureOp atomicCaptureOp,
33873364
return moduleTranslation.lookupValue(yieldop.getResults()[0]);
33883365
};
33893366

3390-
bool isIgnoreDenormalMode;
3391-
bool isFineGrainedMemory;
3392-
bool isRemoteMemory;
3393-
extractAtomicControlFlags(atomicUpdateOp, isIgnoreDenormalMode,
3394-
isFineGrainedMemory, isRemoteMemory);
33953367
// Handle ambiguous alloca, if any.
33963368
auto allocaIP = findAllocaInsertPoint(builder, moduleTranslation);
33973369
llvm::OpenMPIRBuilder::LocationDescription ompLoc(builder);
33983370
llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP =
33993371
ompBuilder->createAtomicCapture(
34003372
ompLoc, allocaIP, llvmAtomicX, llvmAtomicV, llvmExpr, atomicOrdering,
3401-
binop, updateFn, atomicUpdateOp, isPostfixUpdate, isXBinopExpr,
3402-
isIgnoreDenormalMode, isFineGrainedMemory, isRemoteMemory);
3373+
binop, updateFn, atomicUpdateOp, isPostfixUpdate, isXBinopExpr);
34033374

34043375
if (failed(handleError(afterIP, *atomicCaptureOp)))
34053376
return failure();

mlir/test/Target/LLVMIR/omptarget-atomic-capture-control-options.mlir

Lines changed: 0 additions & 44 deletions
This file was deleted.

mlir/test/Target/LLVMIR/omptarget-atomic-update-control-options.mlir

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)