[flang-commits] [flang] [flang] Add fir.declare handling in --fir-to-llvm-ir (PR #93487)
Kelvin Li via flang-commits
flang-commits at lists.llvm.org
Mon May 27 12:36:09 PDT 2024
https://github.com/kkwli updated https://github.com/llvm/llvm-project/pull/93487
>From a7ccbe5c484d4cd95e3bbd48379702dd75bf92fb Mon Sep 17 00:00:00 2001
From: Kelvin Li <kli at ca.ibm.com>
Date: Sat, 25 May 2024 01:20:25 -0400
Subject: [PATCH 1/2] [flang] Add fir.declare handling in --fir-to-llvm-ir
---
flang/lib/Optimizer/CodeGen/CodeGen.cpp | 37 +++++++++++++------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index 74e68725003cb..e40ba6f734191 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -171,11 +171,12 @@ genAllocationScaleSize(OP op, mlir::Type ity,
}
namespace {
-struct DeclareOpConversion : public fir::FIROpConversion<fir::cg::XDeclareOp> {
-public:
- using FIROpConversion::FIROpConversion;
+template <typename OP>
+struct DeclareCommonConversion : public fir::FIROpConversion<OP> {
+ using fir::FIROpConversion<OP>::FIROpConversion;
+ using OpAdaptor = typename OP::Adaptor;
mlir::LogicalResult
- matchAndRewrite(fir::cg::XDeclareOp declareOp, OpAdaptor adaptor,
+ matchAndRewrite(OP declareOp, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const override {
auto memRef = adaptor.getOperands()[0];
if (auto fusedLoc = mlir::dyn_cast<mlir::FusedLoc>(declareOp.getLoc())) {
@@ -3752,19 +3753,21 @@ void fir::populateFIRToLLVMConversionPatterns(
BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
- CoordinateOpConversion, DTEntryOpConversion, DeclareOpConversion,
- DivcOpConversion, EmboxOpConversion, EmboxCharOpConversion,
- EmboxProcOpConversion, ExtractValueOpConversion, FieldIndexOpConversion,
- FirEndOpConversion, FreeMemOpConversion, GlobalLenOpConversion,
- GlobalOpConversion, HasValueOpConversion, InsertOnRangeOpConversion,
- InsertValueOpConversion, IsPresentOpConversion, LenParamIndexOpConversion,
- LoadOpConversion, MulcOpConversion, NegcOpConversion,
- NoReassocOpConversion, SelectCaseOpConversion, SelectOpConversion,
- SelectRankOpConversion, SelectTypeOpConversion, ShapeOpConversion,
- ShapeShiftOpConversion, ShiftOpConversion, SliceOpConversion,
- StoreOpConversion, StringLitOpConversion, SubcOpConversion,
- TypeDescOpConversion, TypeInfoOpConversion, UnboxCharOpConversion,
- UnboxProcOpConversion, UndefOpConversion, UnreachableOpConversion,
+ CoordinateOpConversion, DTEntryOpConversion,
+ DeclareCommonConversion<fir::cg::XDeclareOp>,
+ DeclareCommonConversion<fir::DeclareOp>, DivcOpConversion,
+ EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
+ ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
+ FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
+ HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion,
+ IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion,
+ MulcOpConversion, NegcOpConversion, NoReassocOpConversion,
+ SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion,
+ SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion,
+ ShiftOpConversion, SliceOpConversion, StoreOpConversion,
+ StringLitOpConversion, SubcOpConversion, TypeDescOpConversion,
+ TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion,
+ UndefOpConversion, UnreachableOpConversion,
UnrealizedConversionCastOpConversion, XArrayCoorOpConversion,
XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter,
options);
>From bb470ecc61a21a636da113ef939e9213ea241049 Mon Sep 17 00:00:00 2001
From: Kelvin Li <kli at ca.ibm.com>
Date: Mon, 27 May 2024 15:35:39 -0400
Subject: [PATCH 2/2] Add test
---
flang/test/Fir/convert-to-llvm.fir | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/flang/test/Fir/convert-to-llvm.fir b/flang/test/Fir/convert-to-llvm.fir
index 21323a5e657c9..1ac9e9c38bead 100644
--- a/flang/test/Fir/convert-to-llvm.fir
+++ b/flang/test/Fir/convert-to-llvm.fir
@@ -2698,3 +2698,17 @@ func.func @coordinate_array_unknown_size_1d(%arg0: !fir.ptr<!fir.array<? x i32>>
// CHECK: %[[VAL_2:.*]] = llvm.getelementptr %[[VAL_0]]{{\[}}%[[VAL_1]]] : (!llvm.ptr, i64) -> !llvm.ptr, i32
// CHECK: llvm.return
// CHECK: }
+
+// -----
+
+// Test `fir.declare` conversion.
+func.func @_QPsub() {
+ %0 = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFsubEx"}
+ %1 = fir.declare %0 {uniq_name = "_QFsubEx"} : (!fir.ref<i32>) -> !fir.ref<i32>
+ return
+}
+// CHECK-LABEL: llvm.func @_QPsub() {
+// CHECK: %0 = llvm.mlir.constant(1 : i64) : i64
+// CHECK: %1 = llvm.alloca %0 x i32 {bindc_name = "x"} : (i64) -> !llvm.ptr
+// CHECK: llvm.return
+// CHECK: }
More information about the flang-commits
mailing list