From fd0417a3cf7d4cdee7d6984752453ce3ec93e860 Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Wed, 9 Feb 2022 15:11:55 +0100 Subject: [PATCH] [flang] Add type conversion for !fir.box `none` is used in `fir.box` type to specify a polymorphic type. This patch add the conversion from `!fir.box` to LLVM. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D119325 Co-authored-by: Eric Schweitz Co-authored-by: Jean Perier --- flang/lib/Optimizer/CodeGen/TypeConverter.h | 4 ++++ flang/test/Fir/types-to-llvm.fir | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/flang/lib/Optimizer/CodeGen/TypeConverter.h b/flang/lib/Optimizer/CodeGen/TypeConverter.h index 10a30bfd86a2..3202b00e72c5 100644 --- a/flang/lib/Optimizer/CodeGen/TypeConverter.h +++ b/flang/lib/Optimizer/CodeGen/TypeConverter.h @@ -124,6 +124,10 @@ public: return mlir::LLVM::LLVMStructType::getLiteral(&getContext(), members, /*isPacked=*/false); }); + addConversion([&](mlir::NoneType none) { + return mlir::LLVM::LLVMStructType::getLiteral( + none.getContext(), llvm::None, /*isPacked=*/false); + }); } // i32 is used here because LLVM wants i32 constants when indexing into struct diff --git a/flang/test/Fir/types-to-llvm.fir b/flang/test/Fir/types-to-llvm.fir index f47410dd4cc5..a8b1fd4225c7 100644 --- a/flang/test/Fir/types-to-llvm.fir +++ b/flang/test/Fir/types-to-llvm.fir @@ -418,3 +418,11 @@ func private @foo0(%arg0: tuple>) func private @foo1(%arg0: !fir.type}>) // CHECK-LABEL: foo1 // CHECK-SAME: !llvm.struct<"derived8", (i64, struct<(ptr, i{{.*}})>)> + +// ----- + +// Test fir.box translation. +// `none` is used for polymorphic type. +func private @foo0(%arg0: !fir.box) +// CHECK-LABEL: foo0 +// CHECK-SAME: !llvm.ptr>, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}})>>)