[flang-commits] [PATCH] D136254: [flang] add fir.declare codegen support

Jean Perier via Phabricator via flang-commits flang-commits at lists.llvm.org
Thu Oct 20 01:18:09 PDT 2022


This revision was automatically updated to reflect the committed changes.
Closed by commit rGc852174a4935: [flang] add fir.declare codegen support (authored by jeanPerier).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136254/new/

https://reviews.llvm.org/D136254

Files:
  flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
  flang/test/Fir/declare-codegen.fir


Index: flang/test/Fir/declare-codegen.fir
===================================================================
--- /dev/null
+++ flang/test/Fir/declare-codegen.fir
@@ -0,0 +1,20 @@
+// Test rewrite of fir.declare. The result is replaced by the memref operand.
+// RUN: fir-opt --cg-rewrite %s -o - | FileCheck %s
+
+
+func.func @test(%arg0: !fir.ref<!fir.array<12x23xi32>>) {
+  %c-1 = arith.constant -1 : index
+  %c12 = arith.constant 12 : index
+  %c-2 = arith.constant -2 : index
+  %c23 = arith.constant 23 : index
+  %0 = fir.shape_shift %c12, %c-1, %c23, %c-2 : (index, index, index, index) -> !fir.shapeshift<2>
+  %1 = fir.declare %arg0(%0) {uniq_name = "_QFarray_numeric_lboundsEx"} : (!fir.ref<!fir.array<12x23xi32>>, !fir.shapeshift<2>) -> !fir.ref<!fir.array<12x23xi32>>
+  fir.call @bar(%1) : (!fir.ref<!fir.array<12x23xi32>>) -> ()
+  return
+}
+func.func private @bar(%arg0: !fir.ref<!fir.array<12x23xi32>>)
+
+
+// CHECK-LABEL: func.func @test(
+// CHECK-SAME: %[[arg0:.*]]: !fir.ref<!fir.array<12x23xi32>>) {
+// CHECK-NEXT: fir.call @bar(%[[arg0]]) : (!fir.ref<!fir.array<12x23xi32>>) -> ()
Index: flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
===================================================================
--- flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+++ flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
@@ -266,6 +266,18 @@
   }
 };
 
+class DeclareOpConversion : public mlir::OpRewritePattern<fir::DeclareOp> {
+public:
+  using OpRewritePattern::OpRewritePattern;
+
+  mlir::LogicalResult
+  matchAndRewrite(fir::DeclareOp declareOp,
+                  mlir::PatternRewriter &rewriter) const override {
+    rewriter.replaceOp(declareOp, declareOp.getMemref());
+    return mlir::success();
+  }
+};
+
 class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
 public:
   void runOn(mlir::Operation *op, mlir::Region &region) {
@@ -276,6 +288,7 @@
                            fir::FIRCodeGenDialect, mlir::func::FuncDialect>();
     target.addIllegalOp<fir::ArrayCoorOp>();
     target.addIllegalOp<fir::ReboxOp>();
+    target.addIllegalOp<fir::DeclareOp>();
     target.addDynamicallyLegalOp<fir::EmboxOp>([](fir::EmboxOp embox) {
       return !(embox.getShape() || embox.getType()
                                        .cast<fir::BaseBoxType>()
@@ -283,8 +296,8 @@
                                        .isa<fir::SequenceType>());
     });
     mlir::RewritePatternSet patterns(&context);
-    patterns.insert<EmboxConversion, ArrayCoorConversion, ReboxConversion>(
-        &context);
+    patterns.insert<EmboxConversion, ArrayCoorConversion, ReboxConversion,
+                    DeclareOpConversion>(&context);
     if (mlir::failed(
             mlir::applyPartialConversion(op, target, std::move(patterns)))) {
       mlir::emitError(mlir::UnknownLoc::get(&context),


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136254.469129.patch
Type: text/x-patch
Size: 2828 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20221020/45f77906/attachment-0001.bin>


More information about the flang-commits mailing list