[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