@@ -3205,6 +3205,23 @@ llvm::AtomicRMWInst::BinOp convertBinOpToAtomic(Operation &op) {
3205
3205
.Default (llvm::AtomicRMWInst::BinOp::BAD_BINOP);
3206
3206
}
3207
3207
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
+
3208
3225
// / Converts an OpenMP atomic update operation using OpenMPIRBuilder.
3209
3226
static LogicalResult
3210
3227
convertOmpAtomicUpdate (omp::AtomicUpdateOp &opInst,
@@ -3269,17 +3286,11 @@ convertOmpAtomicUpdate(omp::AtomicUpdateOp &opInst,
3269
3286
return moduleTranslation.lookupValue (yieldop.getResults ()[0 ]);
3270
3287
};
3271
3288
3272
- bool isIgnoreDenormalMode = false ;
3273
- bool isFineGrainedMemory = false ;
3274
- bool isRemoteMemory = false ;
3275
- if (opInst->hasAttr (opInst.getAtomicControlAttrName ())) {
3276
- mlir::omp::AtomicControlAttr atomicControlAttr =
3277
- opInst.getAtomicControlAttr ();
3278
- isIgnoreDenormalMode = atomicControlAttr.getIgnoreDenormalMode ();
3279
- isFineGrainedMemory = atomicControlAttr.getFineGrainedMemory ();
3280
- isRemoteMemory = atomicControlAttr.getRemoteMemory ();
3281
- }
3282
-
3289
+ bool isIgnoreDenormalMode;
3290
+ bool isFineGrainedMemory;
3291
+ bool isRemoteMemory;
3292
+ extractAtomicControlFlags (opInst, isIgnoreDenormalMode, isFineGrainedMemory,
3293
+ isRemoteMemory);
3283
3294
// Handle ambiguous alloca, if any.
3284
3295
auto allocaIP = findAllocaInsertPoint (builder, moduleTranslation);
3285
3296
llvm::OpenMPIRBuilder::LocationDescription ompLoc (builder);
@@ -3376,18 +3387,11 @@ convertOmpAtomicCapture(omp::AtomicCaptureOp atomicCaptureOp,
3376
3387
return moduleTranslation.lookupValue (yieldop.getResults ()[0 ]);
3377
3388
};
3378
3389
3379
- bool isIgnoreDenormalMode = false ;
3380
- bool isFineGrainedMemory = false ;
3381
- bool isRemoteMemory = false ;
3382
- if (atomicUpdateOp &&
3383
- atomicUpdateOp->hasAttr (atomicUpdateOp.getAtomicControlAttrName ())) {
3384
- mlir::omp::AtomicControlAttr atomicControlAttr =
3385
- atomicUpdateOp.getAtomicControlAttr ();
3386
- isIgnoreDenormalMode = atomicControlAttr.getIgnoreDenormalMode ();
3387
- isFineGrainedMemory = atomicControlAttr.getFineGrainedMemory ();
3388
- isRemoteMemory = atomicControlAttr.getRemoteMemory ();
3389
- }
3390
-
3390
+ bool isIgnoreDenormalMode;
3391
+ bool isFineGrainedMemory;
3392
+ bool isRemoteMemory;
3393
+ extractAtomicControlFlags (atomicUpdateOp, isIgnoreDenormalMode,
3394
+ isFineGrainedMemory, isRemoteMemory);
3391
3395
// Handle ambiguous alloca, if any.
3392
3396
auto allocaIP = findAllocaInsertPoint (builder, moduleTranslation);
3393
3397
llvm::OpenMPIRBuilder::LocationDescription ompLoc (builder);
0 commit comments