[flang-commits] [PATCH] D148310: [flang][hlfir] Preserve hlfir.assign in the bufferize-hlfir pass
Jean Perier via Phabricator via flang-commits
flang-commits at lists.llvm.org
Sun Apr 16 22:48:54 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rGe779d54d2137: [flang][hlfir] Preserve hlfir.assign in the bufferize-hlfir pass (authored by jeanPerier).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148310/new/
https://reviews.llvm.org/D148310
Files:
flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
flang/test/HLFIR/assign-bufferize.fir
Index: flang/test/HLFIR/assign-bufferize.fir
===================================================================
--- /dev/null
+++ flang/test/HLFIR/assign-bufferize.fir
@@ -0,0 +1,16 @@
+// Test hlfir.assign rewrite in the bufferization pass.
+// Assign in itself is not transformed, but its operands may be
+// expressions that are bufferized and must be updated.
+// RUN: fir-opt %s -bufferize-hlfir | FileCheck %s
+
+func.func @keep_attributes(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,8>>>>>, %arg1: !fir.box<!fir.array<1x!fir.char<1,?>>>) {
+ %true = arith.constant true
+ %0 = hlfir.as_expr %arg1 move %true : (!fir.box<!fir.array<1x!fir.char<1,?>>>, i1) -> !hlfir.expr<1x!fir.char<1,?>>
+ hlfir.assign %0 to %arg0 realloc keep_lhs_len : !hlfir.expr<1x!fir.char<1,?>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,8>>>>>
+ return
+}
+
+// CHECK-LABEL: func.func @keep_attributes(
+// CHECK-SAME: %[[X:.*]]: !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,8>>>>>,
+// CHECK-SAME: %[[Y:.*]]: !fir.box<!fir.array<1x!fir.char<1,?>>>) {
+// CHECK: hlfir.assign %[[Y]] to %[[X]] realloc keep_lhs_len : !fir.box<!fir.array<1x!fir.char<1,?>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,8>>>>>
Index: flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
===================================================================
--- flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
+++ flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
@@ -196,9 +196,12 @@
mlir::LogicalResult
matchAndRewrite(hlfir::AssignOp assign, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const override {
- rewriter.replaceOpWithNewOp<hlfir::AssignOp>(
- assign, getBufferizedExprStorage(adaptor.getOperands()[0]),
- getBufferizedExprStorage(adaptor.getOperands()[1]));
+ llvm::SmallVector<mlir::Value> newOperands;
+ for (mlir::Value operand : adaptor.getOperands())
+ newOperands.push_back(getBufferizedExprStorage(operand));
+ rewriter.startRootUpdate(assign);
+ assign->setOperands(newOperands);
+ rewriter.finalizeRootUpdate(assign);
return mlir::success();
}
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148310.514100.patch
Type: text/x-patch
Size: 2182 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230417/399a8e65/attachment-0001.bin>
More information about the flang-commits
mailing list