Skip to content

Commit d32839c

Browse files
authored
[flang] Review usage of auto in Lower/VectorSubscripts.cpp (#1297)
1 parent 0f79a29 commit d32839c

File tree

1 file changed

+46
-44
lines changed

1 file changed

+46
-44
lines changed

flang/lib/Lower/VectorSubscripts.cpp

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,24 @@ class VectorSubscriptBoxBuilder {
8181
mlir::Type gen(const Fortran::evaluate::Substring &substring) {
8282
// StaticDataObject::Pointer bases are constants and cannot be
8383
// subscripted, so the base must be a DataRef here.
84-
auto baseElementType =
84+
mlir::Type baseElementType =
8585
gen(std::get<Fortran::evaluate::DataRef>(substring.parent()));
86-
auto &builder = converter.getFirOpBuilder();
87-
auto idxTy = builder.getIndexType();
88-
auto lb = genScalarValue(substring.lower());
86+
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
87+
mlir::Type idxTy = builder.getIndexType();
88+
mlir::Value lb = genScalarValue(substring.lower());
8989
substringBounds.emplace_back(builder.createConvert(loc, idxTy, lb));
9090
if (const auto &ubExpr = substring.upper()) {
91-
auto ub = genScalarValue(*ubExpr);
91+
mlir::Value ub = genScalarValue(*ubExpr);
9292
substringBounds.emplace_back(builder.createConvert(loc, idxTy, ub));
9393
}
9494
return baseElementType;
9595
}
9696

9797
mlir::Type gen(const Fortran::evaluate::ComplexPart &complexPart) {
9898
auto complexType = gen(complexPart.complex());
99-
auto &builder = converter.getFirOpBuilder();
100-
auto i32Ty = builder.getI32Type(); // llvm's GEP requires i32
101-
auto offset = builder.createIntegerConstant(
99+
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
100+
mlir::Type i32Ty = builder.getI32Type(); // llvm's GEP requires i32
101+
mlir::Value offset = builder.createIntegerConstant(
102102
loc, i32Ty,
103103
complexPart.part() == Fortran::evaluate::ComplexPart::Part::RE ? 0 : 1);
104104
componentPath.emplace_back(offset);
@@ -107,19 +107,19 @@ class VectorSubscriptBoxBuilder {
107107

108108
mlir::Type gen(const Fortran::evaluate::Component &component) {
109109
auto recTy = gen(component.base()).cast<fir::RecordType>();
110-
const auto &componentSymbol = component.GetLastSymbol();
110+
const Fortran::semantics::Symbol &componentSymbol = component.GetLastSymbol();
111111
// Parent components will not be found here, they are not part
112112
// of the FIR type and cannot be used in the path yet.
113113
if (componentSymbol.test(Fortran::semantics::Symbol::Flag::ParentComp))
114114
TODO(loc, "Reference to parent component");
115-
auto fldTy = fir::FieldType::get(&converter.getMLIRContext());
116-
auto componentName = toStringRef(componentSymbol.name());
115+
mlir::Type fldTy = fir::FieldType::get(&converter.getMLIRContext());
116+
llvm::StringRef componentName = toStringRef(componentSymbol.name());
117117
// Parameters threading in field_index is not yet very clear. We only
118118
// have the ones of the ranked array ref at hand, but it looks like
119119
// the fir.field_index expects the one of the direct base.
120120
if (recTy.getNumLenParams() != 0)
121121
TODO(loc, "threading length parameters in field index op");
122-
auto &builder = converter.getFirOpBuilder();
122+
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
123123
componentPath.emplace_back(builder.create<fir::FieldIndexOp>(
124124
loc, fldTy, componentName, recTy, /*typeParams*/ llvm::None));
125125
return fir::unwrapSequenceType(recTy.getType(componentName));
@@ -142,8 +142,8 @@ class VectorSubscriptBoxBuilder {
142142
// This is a scalar ArrayRef (only scalar indexes), collect the indexes and
143143
// visit the base that must contain another arrayRef with the vector
144144
// subscript.
145-
auto elementType = gen(namedEntityToDataRef(arrayRef.base()));
146-
for (const auto &subscript : arrayRef.subscript()) {
145+
mlir::Type elementType = gen(namedEntityToDataRef(arrayRef.base()));
146+
for (const Fortran::evaluate::Subscript &subscript : arrayRef.subscript()) {
147147
const auto &expr =
148148
std::get<Fortran::evaluate::IndirectSubscriptIntegerExpr>(
149149
subscript.u);
@@ -158,12 +158,13 @@ class VectorSubscriptBoxBuilder {
158158
mlir::Type genRankedArrayRefSubscriptAndBase(
159159
const Fortran::evaluate::ArrayRef &arrayRef) {
160160
// Lower the save the base
161-
auto baseExpr = namedEntityToExpr(arrayRef.base());
161+
Fortran::evaluate::Expr<Fortran::evaluate::SomeType> baseExpr
162+
= namedEntityToExpr(arrayRef.base());
162163
loweredBase = converter.genExprAddr(baseExpr, stmtCtx);
163164
// Lower and save the subscripts
164-
auto &builder = converter.getFirOpBuilder();
165-
auto idxTy = builder.getIndexType();
166-
auto one = builder.createIntegerConstant(loc, idxTy, 1);
165+
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
166+
mlir::Type idxTy = builder.getIndexType();
167+
mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
167168
for (const auto &subscript : llvm::enumerate(arrayRef.subscript())) {
168169
std::visit(
169170
Fortran::common::visitors{
@@ -178,7 +179,7 @@ class VectorSubscriptBoxBuilder {
178179
// temp array value.
179180
auto vector = converter.genExprAddr(
180181
ignoreEvConvert(expr.value()), stmtCtx);
181-
auto size =
182+
mlir::Value size =
182183
fir::factory::readExtent(builder, loc, vector, /*dim=*/0);
183184
size = builder.createConvert(loc, idxTy, size);
184185
loweredSubscripts.emplace_back(
@@ -199,7 +200,7 @@ class VectorSubscriptBoxBuilder {
199200
subscript.index());
200201
lb = builder.createConvert(loc, idxTy, lb);
201202
ub = builder.createConvert(loc, idxTy, ub);
202-
auto stride = genScalarValue(triplet.stride());
203+
mlir::Value stride = genScalarValue(triplet.stride());
203204
stride = builder.createConvert(loc, idxTy, stride);
204205
loweredSubscripts.emplace_back(LoweredTriplet{lb, ub, stride});
205206
},
@@ -257,8 +258,8 @@ mlir::Value Fortran::lower::VectorSubscriptBox::loopOverElementsBase(
257258
fir::FirOpBuilder &builder, mlir::Location loc,
258259
const Generator &elementalGenerator,
259260
[[maybe_unused]] mlir::Value initialCondition) {
260-
auto shape = builder.createShape(loc, loweredBase);
261-
auto slice = createSlice(builder, loc);
261+
mlir::Value shape = builder.createShape(loc, loweredBase);
262+
mlir::Value slice = createSlice(builder, loc);
262263

263264
// Create loop nest for triplets and vector subscripts in column
264265
// major order.
@@ -286,7 +287,8 @@ mlir::Value Fortran::lower::VectorSubscriptBox::loopOverElementsBase(
286287
assert(outerLoop && !inductionVariables.empty() &&
287288
"at least one loop should be created");
288289

289-
auto elem = getElementAt(builder, loc, shape, slice, inductionVariables);
290+
fir::ExtendedValue elem =
291+
getElementAt(builder, loc, shape, slice, inductionVariables);
290292

291293
if constexpr (std::is_same_v<LoopType, fir::IterWhileOp>) {
292294
auto res = elementalGenerator(elem);
@@ -320,11 +322,11 @@ mlir::Value Fortran::lower::VectorSubscriptBox::loopOverElementsWhile(
320322
mlir::Value
321323
Fortran::lower::VectorSubscriptBox::createSlice(fir::FirOpBuilder &builder,
322324
mlir::Location loc) {
323-
auto idxTy = builder.getIndexType();
325+
mlir::Type idxTy = builder.getIndexType();
324326
llvm::SmallVector<mlir::Value> triples;
325-
auto one = builder.createIntegerConstant(loc, idxTy, 1);
327+
mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
326328
auto undef = builder.create<fir::UndefOp>(loc, idxTy);
327-
for (const auto &subscript : loweredSubscripts)
329+
for (const LoweredSubscript &subscript : loweredSubscripts)
328330
std::visit(Fortran::common::visitors{
329331
[&](const LoweredTriplet &triplet) {
330332
triples.emplace_back(triplet.lb);
@@ -349,20 +351,20 @@ Fortran::lower::VectorSubscriptBox::createSlice(fir::FirOpBuilder &builder,
349351
llvm::SmallVector<std::tuple<mlir::Value, mlir::Value, mlir::Value>>
350352
Fortran::lower::VectorSubscriptBox::genLoopBounds(fir::FirOpBuilder &builder,
351353
mlir::Location loc) {
352-
auto idxTy = builder.getIndexType();
353-
auto one = builder.createIntegerConstant(loc, idxTy, 1);
354-
auto zero = builder.createIntegerConstant(loc, idxTy, 0);
354+
mlir::Type idxTy = builder.getIndexType();
355+
mlir::Value one = builder.createIntegerConstant(loc, idxTy, 1);
356+
mlir::Value zero = builder.createIntegerConstant(loc, idxTy, 0);
355357
llvm::SmallVector<std::tuple<mlir::Value, mlir::Value, mlir::Value>> bounds;
356-
auto dimension = loweredSubscripts.size();
357-
for (const auto &subscript : llvm::reverse(loweredSubscripts)) {
358+
size_t dimension = loweredSubscripts.size();
359+
for (const LoweredSubscript &subscript : llvm::reverse(loweredSubscripts)) {
358360
--dimension;
359361
if (std::holds_alternative<mlir::Value>(subscript))
360362
continue;
361363
mlir::Value lb, ub, step;
362364
if (const auto *triplet = std::get_if<LoweredTriplet>(&subscript)) {
363-
auto extent = builder.genExtentFromTriplet(loc, triplet->lb, triplet->ub,
364-
triplet->stride, idxTy);
365-
auto baseLb = fir::factory::readLowerBound(builder, loc, loweredBase,
365+
mlir::Value extent = builder.genExtentFromTriplet(loc, triplet->lb,
366+
triplet->ub, triplet->stride, idxTy);
367+
mlir::Value baseLb = fir::factory::readLowerBound(builder, loc, loweredBase,
366368
dimension, one);
367369
baseLb = builder.createConvert(loc, idxTy, baseLb);
368370
lb = baseLb;
@@ -384,20 +386,20 @@ fir::ExtendedValue Fortran::lower::VectorSubscriptBox::getElementAt(
384386
fir::FirOpBuilder &builder, mlir::Location loc, mlir::Value shape,
385387
mlir::Value slice, mlir::ValueRange inductionVariables) {
386388
/// Generate the indexes for the array_coor inside the loops.
387-
auto idxTy = builder.getIndexType();
389+
mlir::Type idxTy = builder.getIndexType();
388390
llvm::SmallVector<mlir::Value> indexes;
389-
auto inductionIdx = inductionVariables.size() - 1;
390-
for (const auto &subscript : loweredSubscripts)
391+
size_t inductionIdx = inductionVariables.size() - 1;
392+
for (const LoweredSubscript &subscript : loweredSubscripts)
391393
std::visit(Fortran::common::visitors{
392394
[&](const LoweredTriplet &triplet) {
393395
indexes.emplace_back(inductionVariables[inductionIdx--]);
394396
},
395397
[&](const LoweredVectorSubscript &vector) {
396-
auto vecIndex = inductionVariables[inductionIdx--];
397-
auto vecBase = fir::getBase(vector.vector);
398-
auto vecEleTy = fir::unwrapSequenceType(
398+
mlir::Value vecIndex = inductionVariables[inductionIdx--];
399+
mlir::Value vecBase = fir::getBase(vector.vector);
400+
mlir::Type vecEleTy = fir::unwrapSequenceType(
399401
fir::unwrapPassByRefType(vecBase.getType()));
400-
auto refTy = builder.getRefType(vecEleTy);
402+
mlir::Type refTy = builder.getRefType(vecEleTy);
401403
auto vecEltRef = builder.create<fir::CoordinateOp>(
402404
loc, refTy, vecBase, vecIndex);
403405
auto vecElt =
@@ -410,14 +412,14 @@ fir::ExtendedValue Fortran::lower::VectorSubscriptBox::getElementAt(
410412
},
411413
},
412414
subscript);
413-
auto refTy = builder.getRefType(getElementType());
415+
mlir::Type refTy = builder.getRefType(getElementType());
414416
auto elementAddr = builder.create<fir::ArrayCoorOp>(
415417
loc, refTy, fir::getBase(loweredBase), shape, slice, indexes,
416418
fir::getTypeParams(loweredBase));
417-
auto element = fir::factory::arraySectionElementToExtendedValue(
419+
fir::ExtendedValue element = fir::factory::arraySectionElementToExtendedValue(
418420
builder, loc, loweredBase, elementAddr, slice);
419421
if (!substringBounds.empty()) {
420-
auto *charBox = element.getCharBox();
422+
const fir::CharBoxValue *charBox = element.getCharBox();
421423
assert(charBox && "substring requires CharBox base");
422424
fir::factory::CharacterExprHelper helper{builder, loc};
423425
return helper.createSubstring(*charBox, substringBounds);

0 commit comments

Comments
 (0)