@@ -135,11 +135,11 @@ class CapturedSimpleScalars : public CapturedSymbols<CapturedSimpleScalars> {
135
135
static void instantiateHostTuple (const InstantiateHostTuple &args,
136
136
Fortran::lower::AbstractConverter &converter,
137
137
const Fortran::semantics::Symbol &) {
138
- auto &builder = converter.getFirOpBuilder ();
139
- auto typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
138
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
139
+ mlir::Type typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
140
140
assert (typeInTuple && " addrInTuple must be an address" );
141
- auto castBox = builder.createConvert (args.loc , typeInTuple,
142
- fir::getBase (args.hostValue ));
141
+ mlir::Value castBox = builder.createConvert (args.loc , typeInTuple,
142
+ fir::getBase (args.hostValue ));
143
143
builder.create <fir::StoreOp>(args.loc , castBox, args.addrInTuple );
144
144
}
145
145
@@ -166,11 +166,11 @@ class CapturedProcedure : public CapturedSymbols<CapturedProcedure> {
166
166
static void instantiateHostTuple (const InstantiateHostTuple &args,
167
167
Fortran::lower::AbstractConverter &converter,
168
168
const Fortran::semantics::Symbol &) {
169
- auto &builder = converter.getFirOpBuilder ();
170
- auto typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
169
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
170
+ mlir::Type typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
171
171
assert (typeInTuple && " addrInTuple must be an address" );
172
- auto castBox = builder.createConvert (args.loc , typeInTuple,
173
- fir::getBase (args.hostValue ));
172
+ mlir::Value castBox = builder.createConvert (args.loc , typeInTuple,
173
+ fir::getBase (args.hostValue ));
174
174
builder.create <fir::StoreOp>(args.loc , castBox, args.addrInTuple );
175
175
}
176
176
@@ -193,18 +193,19 @@ class CapturedCharacterScalars
193
193
194
194
static mlir::Type getType (Fortran::lower::AbstractConverter &converter,
195
195
const Fortran::semantics::Symbol &sym) {
196
- auto kind = converter.genType (sym).cast <fir::CharacterType>().getFKind ();
196
+ fir::KindTy kind =
197
+ converter.genType (sym).cast <fir::CharacterType>().getFKind ();
197
198
return fir::BoxCharType::get (&converter.getMLIRContext (), kind);
198
199
}
199
200
200
201
static void instantiateHostTuple (const InstantiateHostTuple &args,
201
202
Fortran::lower::AbstractConverter &converter,
202
203
const Fortran::semantics::Symbol &) {
203
- auto *charBox = args.hostValue .getCharBox ();
204
+ const fir::CharBoxValue *charBox = args.hostValue .getCharBox ();
204
205
assert (charBox && " host value must be a fir::CharBoxValue" );
205
- auto &builder = converter.getFirOpBuilder ();
206
- auto boxchar = fir::factory::CharacterExprHelper (builder, args.loc )
207
- .createEmbox (*charBox);
206
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
207
+ mlir::Value boxchar = fir::factory::CharacterExprHelper (builder, args.loc )
208
+ .createEmbox (*charBox);
208
209
builder.create <fir::StoreOp>(args.loc , boxchar, args.addrInTuple );
209
210
}
210
211
@@ -214,7 +215,8 @@ class CapturedCharacterScalars
214
215
const Fortran::lower::BoxAnalyzer &) {
215
216
fir::factory::CharacterExprHelper charHelp (converter.getFirOpBuilder (),
216
217
args.loc );
217
- auto unboxchar = charHelp.createUnboxChar (args.valueInTuple );
218
+ std::pair<mlir::Value, mlir::Value> unboxchar =
219
+ charHelp.createUnboxChar (args.valueInTuple );
218
220
args.symMap .addCharSymbol (sym, unboxchar.first , unboxchar.second );
219
221
}
220
222
};
@@ -243,28 +245,28 @@ class CapturedAllocatableAndPointer
243
245
const Fortran::semantics::Symbol &) {
244
246
assert (args.hostValue .getBoxOf <fir::MutableBoxValue>() &&
245
247
" host value must be a fir::MutableBoxValue" );
246
- auto &builder = converter.getFirOpBuilder ();
247
- auto typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
248
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
249
+ mlir::Type typeInTuple = fir::dyn_cast_ptrEleTy (args.addrInTuple .getType ());
248
250
assert (typeInTuple && " addrInTuple must be an address" );
249
- auto castBox = builder.createConvert (args.loc , typeInTuple,
250
- fir::getBase (args.hostValue ));
251
+ mlir::Value castBox = builder.createConvert (args.loc , typeInTuple,
252
+ fir::getBase (args.hostValue ));
251
253
builder.create <fir::StoreOp>(args.loc , castBox, args.addrInTuple );
252
254
}
253
255
static void getFromTuple (const GetFromTuple &args,
254
256
Fortran::lower::AbstractConverter &converter,
255
257
const Fortran::semantics::Symbol &sym,
256
258
const Fortran::lower::BoxAnalyzer &ba) {
257
- auto &builder = converter.getFirOpBuilder ();
258
- auto loc = args.loc ;
259
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
260
+ mlir::Location loc = args.loc ;
259
261
// Non deferred type parameters impact the semantics of some statements
260
262
// where allocatables/pointer can appear. For instance, assignment to a
261
263
// scalar character allocatable with has a different semantics in F2003 and
262
264
// later if the length is non deferred vs when it is deferred. So it is
263
265
// important to keep track of the non deferred parameters here.
264
266
llvm::SmallVector<mlir::Value> nonDeferredLenParams;
265
267
if (ba.isChar ()) {
266
- auto idxTy = builder.getIndexType ();
267
- if (auto len = ba.getCharLenConst ()) {
268
+ mlir::IndexType idxTy = builder.getIndexType ();
269
+ if (llvm::Optional< int64_t > len = ba.getCharLenConst ()) {
268
270
nonDeferredLenParams.push_back (
269
271
builder.createIntegerConstant (loc, idxTy, *len));
270
272
} else if (Fortran::semantics::IsAssumedLengthCharacter (sym) ||
@@ -284,7 +286,7 @@ class CapturedAllocatableAndPointer
284
286
// it's fine to use undefOp in this case.
285
287
auto isPresent = builder.create <fir::IsPresentOp>(
286
288
loc, builder.getI1Type (), fir::getBase (args.valueInTuple ));
287
- auto len =
289
+ mlir::Value len =
288
290
builder.genIfOp (loc, {idxTy}, isPresent, true )
289
291
.genThen ([&]() {
290
292
builder.create <fir::ResultOp>(loc, readLength ());
@@ -321,16 +323,16 @@ class CapturedArrays : public CapturedSymbols<CapturedArrays> {
321
323
public:
322
324
static mlir::Type getType (Fortran::lower::AbstractConverter &converter,
323
325
const Fortran::semantics::Symbol &sym) {
324
- auto type = converter.genType (sym);
326
+ mlir::Type type = converter.genType (sym);
325
327
assert (type.isa <fir::SequenceType>() && " must be a sequence type" );
326
328
return fir::BoxType::get (type);
327
329
}
328
330
329
331
static void instantiateHostTuple (const InstantiateHostTuple &args,
330
332
Fortran::lower::AbstractConverter &converter,
331
333
const Fortran::semantics::Symbol &sym) {
332
- auto &builder = converter.getFirOpBuilder ();
333
- auto loc = args.loc ;
334
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
335
+ mlir::Location loc = args.loc ;
334
336
fir::MutableBoxValue boxInTuple (args.addrInTuple , {}, {});
335
337
if (args.hostValue .getBoxOf <fir::BoxValue>() &&
336
338
Fortran::semantics::IsOptional (sym)) {
@@ -362,21 +364,21 @@ class CapturedArrays : public CapturedSymbols<CapturedArrays> {
362
364
Fortran::lower::AbstractConverter &converter,
363
365
const Fortran::semantics::Symbol &sym,
364
366
const Fortran::lower::BoxAnalyzer &ba) {
365
- auto &builder = converter.getFirOpBuilder ();
366
- auto loc = args.loc ;
367
- auto box = args.valueInTuple ;
368
- auto idxTy = builder.getIndexType ();
367
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
368
+ mlir::Location loc = args.loc ;
369
+ mlir::Value box = args.valueInTuple ;
370
+ mlir::IndexType idxTy = builder.getIndexType ();
369
371
llvm::SmallVector<mlir::Value> lbounds;
370
372
if (!ba.lboundIsAllOnes ()) {
371
373
if (ba.isStaticArray ()) {
372
- for (auto lb : ba.staticLBound ())
374
+ for (std:: int64_t lb : ba.staticLBound ())
373
375
lbounds.emplace_back (builder.createIntegerConstant (loc, idxTy, lb));
374
376
} else {
375
377
// Cannot re-evaluate specification expressions here.
376
378
// Operands values may have changed. Get value from fir.box
377
379
const unsigned rank = sym.Rank ();
378
380
for (unsigned dim = 0 ; dim < rank; ++dim) {
379
- auto dimVal = builder.createIntegerConstant (loc, idxTy, dim);
381
+ mlir::Value dimVal = builder.createIntegerConstant (loc, idxTy, dim);
380
382
auto dims = builder.create <fir::BoxDimsOp>(loc, idxTy, idxTy, idxTy,
381
383
box, dimVal);
382
384
lbounds.emplace_back (dims.getResult (0 ));
@@ -397,7 +399,7 @@ class CapturedArrays : public CapturedSymbols<CapturedArrays> {
397
399
if (Fortran::semantics::IsOptional (sym)) {
398
400
auto boxTy = box.getType ().cast <fir::BoxType>();
399
401
auto addr = builder.create <fir::BoxAddrOp>(loc, boxTy.getEleTy (), box);
400
- auto isPresent = builder.genIsNotNull (loc, addr);
402
+ mlir::Value isPresent = builder.genIsNotNull (loc, addr);
401
403
auto absentBox = builder.create <fir::AbsentOp>(loc, boxTy);
402
404
box = builder.create <mlir::SelectOp>(loc, isPresent, box, absentBox);
403
405
}
@@ -417,7 +419,7 @@ class CapturedArrays : public CapturedSymbols<CapturedArrays> {
417
419
sym.Rank () == 0 || Fortran::evaluate::IsSimplyContiguous (
418
420
Fortran::evaluate::AsGenericExpr (sym).value (),
419
421
converter.getFoldingContext ());
420
- const auto *type = sym.GetType ();
422
+ const Fortran::semantics::DeclTypeSpec *type = sym.GetType ();
421
423
bool isPolymorphic = type && type->IsPolymorphic ();
422
424
return isScalarOrContiguous && !isPolymorphic &&
423
425
!isDerivedWithLengthParameters (sym);
@@ -476,18 +478,18 @@ void Fortran::lower::HostAssociations::hostProcedureBindings(
476
478
return ;
477
479
478
480
// Create the tuple variable.
479
- auto tupTy = unwrapTupleTy (getArgumentType (converter));
480
- auto &builder = converter.getFirOpBuilder ();
481
- auto loc = converter.genLocation ();
481
+ mlir::TupleType tupTy = unwrapTupleTy (getArgumentType (converter));
482
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
483
+ mlir::Location loc = converter.genLocation ();
482
484
auto hostTuple = builder.create <fir::AllocaOp>(loc, tupTy);
483
- auto offTy = builder.getIntegerType (32 );
485
+ mlir::IntegerType offTy = builder.getIntegerType (32 );
484
486
485
487
// Walk the list of symbols and update the pointers in the tuple.
486
488
for (auto s : llvm::enumerate (symbols)) {
487
489
auto indexInTuple = s.index ();
488
- auto off = builder.createIntegerConstant (loc, offTy, indexInTuple);
489
- auto varTy = tupTy.getType (indexInTuple);
490
- auto eleOff = genTupleCoor (builder, loc, varTy, hostTuple, off);
490
+ mlir::Value off = builder.createIntegerConstant (loc, offTy, indexInTuple);
491
+ mlir::Type varTy = tupTy.getType (indexInTuple);
492
+ mlir::Value eleOff = genTupleCoor (builder, loc, varTy, hostTuple, off);
491
493
InstantiateHostTuple instantiateHostTuple{
492
494
symMap.lookupSymbol (s.value ()).toExtendedValue (), eleOff, loc};
493
495
walkCaptureCategories (instantiateHostTuple, converter, *s.value ());
@@ -503,11 +505,11 @@ void Fortran::lower::HostAssociations::internalProcedureBindings(
503
505
return ;
504
506
505
507
// Find the argument with the tuple type. The argument ought to be appended.
506
- auto &builder = converter.getFirOpBuilder ();
507
- auto argTy = getArgumentType (converter);
508
- auto tupTy = unwrapTupleTy (argTy);
509
- auto loc = converter.genLocation ();
510
- auto func = builder.getFunction ();
508
+ fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
509
+ mlir::Type argTy = getArgumentType (converter);
510
+ mlir::TupleType tupTy = unwrapTupleTy (argTy);
511
+ mlir::Location loc = converter.genLocation ();
512
+ mlir::FuncOp func = builder.getFunction ();
511
513
mlir::Value tupleArg;
512
514
for (auto [ty, arg] : llvm::reverse (
513
515
llvm::zip (func.getType ().getInputs (), func.front ().getArguments ())))
@@ -520,13 +522,13 @@ void Fortran::lower::HostAssociations::internalProcedureBindings(
520
522
521
523
converter.bindHostAssocTuple (tupleArg);
522
524
523
- auto offTy = builder.getIntegerType (32 );
525
+ mlir::IntegerType offTy = builder.getIntegerType (32 );
524
526
525
527
// Walk the list and add the bindings to the symbol table.
526
528
for (auto s : llvm::enumerate (symbols)) {
527
- auto off = builder.createIntegerConstant (loc, offTy, s.index ());
528
- auto varTy = tupTy.getType (s.index ());
529
- auto eleOff = genTupleCoor (builder, loc, varTy, tupleArg, off);
529
+ mlir::Value off = builder.createIntegerConstant (loc, offTy, s.index ());
530
+ mlir::Type varTy = tupTy.getType (s.index ());
531
+ mlir::Value eleOff = genTupleCoor (builder, loc, varTy, tupleArg, off);
530
532
mlir::Value valueInTuple = builder.create <fir::LoadOp>(loc, eleOff);
531
533
GetFromTuple getFromTuple{symMap, valueInTuple, loc};
532
534
walkCaptureCategories (getFromTuple, converter, *s.value ());
@@ -542,9 +544,9 @@ mlir::Type Fortran::lower::HostAssociations::getArgumentType(
542
544
543
545
// Walk the list of Symbols and create their types. Wrap them in a reference
544
546
// to a tuple.
545
- auto *ctxt = &converter.getMLIRContext ();
547
+ mlir::MLIRContext *ctxt = &converter.getMLIRContext ();
546
548
llvm::SmallVector<mlir::Type> tupleTys;
547
- for (const auto *sym : symbols)
549
+ for (const Fortran::semantics::Symbol *sym : symbols)
548
550
tupleTys.emplace_back (
549
551
walkCaptureCategories (GetTypeInTuple{}, converter, *sym));
550
552
argType = fir::ReferenceType::get (mlir::TupleType::get (ctxt, tupleTys));
0 commit comments