30
30
#include " mlir/Dialect/OpenMP/OpenMPDialect.h"
31
31
#include " mlir/Dialect/SCF/IR/SCF.h"
32
32
#include " mlir/Transforms/RegionUtils.h"
33
+ #include " llvm/ADT/STLExtras.h"
33
34
#include " llvm/Frontend/OpenMP/OMPConstants.h"
34
35
#include " llvm/Support/CommandLine.h"
35
36
@@ -2122,14 +2123,13 @@ static void createBodyOfOp(
2122
2123
llvm::SmallVector<mlir::Type> tiv (args.size (), loopVarType);
2123
2124
llvm::SmallVector<mlir::Location> locs (args.size (), loc);
2124
2125
firOpBuilder.createBlock (&op.getRegion (), {}, tiv, locs);
2125
- int argIndex = 0 ;
2126
2126
// The argument is not currently in memory, so make a temporary for the
2127
2127
// argument, and store it there, then bind that location to the argument.
2128
- for (const Fortran::semantics::Symbol *arg : args) {
2128
+ for (auto [argIndex, argSymbol] : llvm::enumerate ( args) ) {
2129
2129
mlir::Value indexVal =
2130
2130
fir::getBase (op.getRegion ().front ().getArgument (argIndex));
2131
- storeOp = createAndSetPrivatizedLoopVar (converter, loc, indexVal, arg);
2132
- argIndex++ ;
2131
+ storeOp =
2132
+ createAndSetPrivatizedLoopVar (converter, loc, indexVal, argSymbol) ;
2133
2133
}
2134
2134
} else {
2135
2135
firOpBuilder.createBlock (&op.getRegion ());
@@ -2190,18 +2190,17 @@ static void genBodyOfTargetDataOp(
2190
2190
2191
2191
firOpBuilder.createBlock (®ion, {}, useDeviceTypes, useDeviceLocs);
2192
2192
2193
- unsigned argIndex = 0 ;
2194
- for (const Fortran::semantics::Symbol *sym : useDeviceSymbols) {
2193
+ for (auto [argIndex, argSymbol] : llvm::enumerate (useDeviceSymbols)) {
2195
2194
const mlir::BlockArgument &arg = region.front ().getArgument (argIndex);
2196
- fir::ExtendedValue extVal = converter.getSymbolExtendedValue (*sym );
2195
+ fir::ExtendedValue extVal = converter.getSymbolExtendedValue (*argSymbol );
2197
2196
if (auto refType = arg.getType ().dyn_cast <fir::ReferenceType>()) {
2198
2197
if (fir::isa_builtin_cptr_type (refType.getElementType ())) {
2199
- converter.bindSymbol (*sym , arg);
2198
+ converter.bindSymbol (*argSymbol , arg);
2200
2199
} else {
2201
2200
extVal.match (
2202
2201
[&](const fir::MutableBoxValue &mbv) {
2203
2202
converter.bindSymbol (
2204
- *sym ,
2203
+ *argSymbol ,
2205
2204
fir::MutableBoxValue (
2206
2205
arg, fir::factory::getNonDeferredLenParams (extVal), {}));
2207
2206
},
@@ -2214,7 +2213,6 @@ static void genBodyOfTargetDataOp(
2214
2213
TODO (converter.getCurrentLocation (),
2215
2214
" use_device clause operand unsupported type" );
2216
2215
}
2217
- argIndex++;
2218
2216
}
2219
2217
2220
2218
// Insert dummy instruction to remember the insertion position. The
@@ -2470,8 +2468,6 @@ static void genBodyOfTargetOp(
2470
2468
auto *regionBlock =
2471
2469
firOpBuilder.createBlock (®ion, {}, mapSymTypes, mapSymLocs);
2472
2470
2473
- unsigned argIndex = 0 ;
2474
-
2475
2471
// Clones the `bounds` placing them inside the target region and returns them.
2476
2472
auto cloneBound = [&](mlir::Value bound) {
2477
2473
if (mlir::isMemoryEffectFree (bound.getDefiningOp ())) {
@@ -2491,43 +2487,44 @@ static void genBodyOfTargetOp(
2491
2487
};
2492
2488
2493
2489
// Bind the symbols to their corresponding block arguments.
2494
- for (const Fortran::semantics::Symbol *sym : mapSymbols) {
2490
+ for (auto [argIndex, argSymbol] : llvm::enumerate ( mapSymbols) ) {
2495
2491
const mlir::BlockArgument &arg = region.getArgument (argIndex);
2496
- fir::ExtendedValue extVal = converter.getSymbolExtendedValue (*sym );
2492
+ fir::ExtendedValue extVal = converter.getSymbolExtendedValue (*argSymbol );
2497
2493
extVal.match (
2498
2494
[&](const fir::BoxValue &v) {
2499
- converter.bindSymbol (*sym ,
2495
+ converter.bindSymbol (*argSymbol ,
2500
2496
fir::BoxValue (arg, cloneBounds (v.getLBounds ()),
2501
2497
v.getExplicitParameters (),
2502
2498
v.getExplicitExtents ()));
2503
2499
},
2504
2500
[&](const fir::MutableBoxValue &v) {
2505
2501
converter.bindSymbol (
2506
- *sym , fir::MutableBoxValue (arg, cloneBounds (v.getLBounds ()),
2507
- v.getMutableProperties ()));
2502
+ *argSymbol , fir::MutableBoxValue (arg, cloneBounds (v.getLBounds ()),
2503
+ v.getMutableProperties ()));
2508
2504
},
2509
2505
[&](const fir::ArrayBoxValue &v) {
2510
2506
converter.bindSymbol (
2511
- *sym , fir::ArrayBoxValue (arg, cloneBounds (v.getExtents ()),
2512
- cloneBounds (v.getLBounds ()),
2513
- v.getSourceBox ()));
2507
+ *argSymbol , fir::ArrayBoxValue (arg, cloneBounds (v.getExtents ()),
2508
+ cloneBounds (v.getLBounds ()),
2509
+ v.getSourceBox ()));
2514
2510
},
2515
2511
[&](const fir::CharArrayBoxValue &v) {
2516
2512
converter.bindSymbol (
2517
- *sym , fir::CharArrayBoxValue (arg, cloneBound (v.getLen ()),
2518
- cloneBounds (v.getExtents ()),
2519
- cloneBounds (v.getLBounds ())));
2513
+ *argSymbol , fir::CharArrayBoxValue (arg, cloneBound (v.getLen ()),
2514
+ cloneBounds (v.getExtents ()),
2515
+ cloneBounds (v.getLBounds ())));
2520
2516
},
2521
2517
[&](const fir::CharBoxValue &v) {
2522
- converter.bindSymbol (*sym ,
2518
+ converter.bindSymbol (*argSymbol ,
2523
2519
fir::CharBoxValue (arg, cloneBound (v.getLen ())));
2524
2520
},
2525
- [&](const fir::UnboxedValue &v) { converter.bindSymbol (*sym, arg); },
2521
+ [&](const fir::UnboxedValue &v) {
2522
+ converter.bindSymbol (*argSymbol, arg);
2523
+ },
2526
2524
[&](const auto &) {
2527
2525
TODO (converter.getCurrentLocation (),
2528
2526
" target map clause operand unsupported type" );
2529
2527
});
2530
- argIndex++;
2531
2528
}
2532
2529
2533
2530
// Check if cloning the bounds introduced any dependency on the outer region.
0 commit comments