@@ -196,9 +196,10 @@ class FIROpConversion : public mlir::OpConversionPattern<FromOp> {
196
196
mlir::ConversionPatternRewriter &rewriter) const {
197
197
auto idxTy = lowerTy ().indexType ();
198
198
auto c0 = genConstantOffset (loc, rewriter, 0 );
199
- auto c7 = genConstantOffset (loc, rewriter, 7 );
199
+ auto cDims = genConstantOffset (loc, rewriter, kDimsPosInBox );
200
200
auto dimValue = genConstantIndex (loc, idxTy, rewriter, dim);
201
- return loadFromOffset (loc, box, c0, c7, dimValue, 2 , idxTy, rewriter);
201
+ return loadFromOffset (loc, box, c0, cDims, dimValue, kDimStridePos , idxTy,
202
+ rewriter);
202
203
}
203
204
204
205
// / Read base address from a fir.box. Returned address has type ty.
@@ -1388,34 +1389,34 @@ struct XEmboxOpConversion : public EmboxCommonConversion<fir::cg::XEmboxOp> {
1388
1389
operands.drop_front (xbox.lenParamOffset ()));
1389
1390
// Generate the triples in the dims field of the descriptor
1390
1391
auto i64Ty = mlir::IntegerType::get (xbox.getContext (), 64 );
1391
- auto base = operands[0 ];
1392
+ mlir::Value base = operands[0 ];
1392
1393
assert (!xbox.shape ().empty () && " must have a shape" );
1393
- unsigned shapeOff = xbox.shapeOffset ();
1394
+ unsigned shapeOffset = xbox.shapeOffset ();
1394
1395
bool hasShift = !xbox.shift ().empty ();
1395
- unsigned shiftOff = xbox.shiftOffset ();
1396
+ unsigned shiftOffset = xbox.shiftOffset ();
1396
1397
bool hasSlice = !xbox.slice ().empty ();
1397
- unsigned sliceOff = xbox.sliceOffset ();
1398
- auto loc = xbox.getLoc ();
1398
+ unsigned sliceOffset = xbox.sliceOffset ();
1399
+ mlir::Location loc = xbox.getLoc ();
1399
1400
mlir::Value zero = genConstantIndex (loc, i64Ty, rewriter, 0 );
1400
1401
mlir::Value one = genConstantIndex (loc, i64Ty, rewriter, 1 );
1401
1402
mlir::Value prevDim = integerCast (loc, rewriter, i64Ty, eleSize);
1402
1403
mlir::Value prevPtrOff = one;
1403
- auto eleTy = boxTy.getEleTy ();
1404
- const auto rank = xbox.getRank ();
1404
+ mlir::Type eleTy = boxTy.getEleTy ();
1405
+ const unsigned rank = xbox.getRank ();
1405
1406
llvm::SmallVector<mlir::Value> gepArgs;
1406
1407
unsigned constRows = 0 ;
1407
1408
mlir::Value ptrOffset = zero;
1408
- auto memEleTy = fir::dyn_cast_ptrEleTy (xbox.memref ().getType ());
1409
+ mlir::Type memEleTy = fir::dyn_cast_ptrEleTy (xbox.memref ().getType ());
1409
1410
assert (memEleTy.isa <fir::SequenceType>());
1410
1411
auto seqTy = memEleTy.cast <fir::SequenceType>();
1411
- auto seqEleTy = seqTy.getEleTy ();
1412
+ mlir::Type seqEleTy = seqTy.getEleTy ();
1412
1413
// Adjust the element scaling factor if the element is a dependent type.
1413
1414
if (fir::hasDynamicSize (seqEleTy)) {
1414
1415
if (auto charTy = seqEleTy.dyn_cast <fir::CharacterType>()) {
1415
1416
assert (xbox.lenParams ().size () == 1 );
1416
- auto charSize = genConstantIndex (
1417
+ mlir::LLVM::ConstantOp charSize = genConstantIndex (
1417
1418
loc, i64Ty, rewriter, lowerTy ().characterBitsize (charTy) / 8 );
1418
- auto castedLen =
1419
+ mlir::Value castedLen =
1419
1420
integerCast (loc, rewriter, i64Ty, operands[xbox.lenParamOffset ()]);
1420
1421
auto byteOffset =
1421
1422
rewriter.create <mlir::LLVM::MulOp>(loc, i64Ty, charSize, castedLen);
@@ -1455,14 +1456,14 @@ struct XEmboxOpConversion : public EmboxCommonConversion<fir::cg::XEmboxOp> {
1455
1456
// translating everything to values in the descriptor wherever the entity
1456
1457
// has a dynamic array dimension.
1457
1458
for (unsigned di = 0 , descIdx = 0 ; di < rank; ++di) {
1458
- mlir::Value extent = operands[shapeOff ];
1459
+ mlir::Value extent = operands[shapeOffset ];
1459
1460
mlir::Value outerExtent = extent;
1460
1461
bool skipNext = false ;
1461
1462
if (hasSlice) {
1462
- auto off = operands[sliceOff ];
1463
+ auto off = operands[sliceOffset ];
1463
1464
auto adj = one;
1464
1465
if (hasShift)
1465
- adj = operands[shiftOff ];
1466
+ adj = operands[shiftOffset ];
1466
1467
auto ao = rewriter.create <mlir::LLVM::SubOp>(loc, i64Ty, off, adj);
1467
1468
if (constRows > 0 ) {
1468
1469
gepArgs.push_back (ao);
@@ -1494,21 +1495,21 @@ struct XEmboxOpConversion : public EmboxCommonConversion<fir::cg::XEmboxOp> {
1494
1495
// then use the value from the shift op as the lower bound.
1495
1496
if (hasShift &&
1496
1497
(isaPointerOrAllocatable || !normalizedLowerBound (xbox)))
1497
- lb = operands[shiftOff ];
1498
+ lb = operands[shiftOffset ];
1498
1499
dest = insertLowerBound (rewriter, loc, dest, descIdx, lb);
1499
1500
1500
1501
// store extent
1501
1502
if (hasSlice)
1502
- extent = computeTripletExtent (rewriter, loc, operands[sliceOff ],
1503
- operands[sliceOff + 1 ],
1504
- operands[sliceOff + 2 ], zero, i64Ty);
1503
+ extent = computeTripletExtent (rewriter, loc, operands[sliceOffset ],
1504
+ operands[sliceOffset + 1 ],
1505
+ operands[sliceOffset + 2 ], zero, i64Ty);
1505
1506
dest = insertExtent (rewriter, loc, dest, descIdx, extent);
1506
1507
1507
1508
// store step (scaled by shaped extent)
1508
1509
mlir::Value step = (hasSubcomp || hasSubstr) ? stepExpr : prevDim;
1509
1510
if (hasSlice)
1510
1511
step = rewriter.create <mlir::LLVM::MulOp>(loc, i64Ty, step,
1511
- operands[sliceOff + 2 ]);
1512
+ operands[sliceOffset + 2 ]);
1512
1513
dest = insertStride (rewriter, loc, dest, descIdx, step);
1513
1514
++descIdx;
1514
1515
}
@@ -1521,11 +1522,11 @@ struct XEmboxOpConversion : public EmboxCommonConversion<fir::cg::XEmboxOp> {
1521
1522
outerExtent);
1522
1523
1523
1524
// increment iterators
1524
- ++shapeOff ;
1525
+ ++shapeOffset ;
1525
1526
if (hasShift)
1526
- ++shiftOff ;
1527
+ ++shiftOffset ;
1527
1528
if (hasSlice)
1528
- sliceOff += 3 ;
1529
+ sliceOffset += 3 ;
1529
1530
}
1530
1531
if (hasSlice || hasSubcomp || hasSubstr) {
1531
1532
llvm::SmallVector<mlir::Value> args = {base, ptrOffset};
@@ -1543,7 +1544,7 @@ struct XEmboxOpConversion : public EmboxCommonConversion<fir::cg::XEmboxOp> {
1543
1544
}
1544
1545
base = rewriter.create <mlir::LLVM::GEPOp>(loc, base.getType (), args);
1545
1546
if (hasSubstr)
1546
- base = shiftSubstringBase (rewriter, loc, base, xbox.substr ()[ 0 ]);
1547
+ base = shiftSubstringBase (rewriter, loc, base, operands[ xbox.substrOffset () ]);
1547
1548
}
1548
1549
dest = insertBaseAddress (rewriter, loc, dest, base);
1549
1550
if (isDerivedTypeWithLenParams (boxTy))
0 commit comments