[flang-commits] [flang] [flang] Inline hlfir.eoshift during HLFIR intrinsics simplication. (PR #153108)
Tom Eccles via flang-commits
flang-commits at lists.llvm.org
Thu Aug 14 03:05:05 PDT 2025
================
@@ -1536,63 +1853,143 @@ class CShiftConversion : public mlir::OpRewritePattern<hlfir::CShiftOp> {
srcIndices.resize(1);
}
- // Copy first portion of the array:
- // do i=1,SH
- // result(i + (SIZE(ARRAY,DIM) - SH)) = array(i)
- // end
- auto genAssign1 = [&](mlir::Location loc, fir::FirOpBuilder &builder,
- mlir::ValueRange index,
- mlir::ValueRange reductionArgs)
+ // genCopy labda generates the body of a generic copy loop.
+ // do i=1,COPY_END
+ // result(i + DEST_OFFSET) = array(i + SOURCE_OFFSET)
+ // end
+ //
+ // It is parameterized by DEST_OFFSET and SOURCE_OFFSET.
+ mlir::Value dstOffset, srcOffset;
+ auto genCopy = [&](mlir::Location loc, fir::FirOpBuilder &builder,
+ mlir::ValueRange index, mlir::ValueRange reductionArgs)
-> llvm::SmallVector<mlir::Value, 0> {
assert(index.size() == 1 && "expected single loop");
mlir::Value srcIndex = builder.createConvert(loc, calcType, index[0]);
+ mlir::Value dstIndex = srcIndex;
+ if (srcOffset)
+ srcIndex =
+ mlir::arith::AddIOp::create(builder, loc, srcIndex, srcOffset);
srcIndices[dimVal - 1] = srcIndex;
hlfir::Entity srcElementValue =
hlfir::loadElementAt(loc, builder, srcArray, srcIndices);
- mlir::Value dstIndex = mlir::arith::AddIOp::create(
- builder, loc, srcIndex,
- mlir::arith::SubIOp::create(builder, loc, shiftDimExtent,
- shiftVal));
+ if (dstOffset)
+ dstIndex =
+ mlir::arith::AddIOp::create(builder, loc, dstIndex, dstOffset);
dstIndices[dimVal - 1] = dstIndex;
hlfir::Entity dstElement = hlfir::getElementAt(
loc, builder, hlfir::Entity{resultArray}, dstIndices);
hlfir::AssignOp::create(builder, loc, srcElementValue, dstElement);
+ // Reset the external parameters' values to make sure
+ // they are properly updated between the labda calls.
----------------
tblah wrote:
```suggestion
// they are properly updated between the lambda calls.
```
https://github.com/llvm/llvm-project/pull/153108
More information about the flang-commits
mailing list