From 903f6b71704f92d9f55ffee60b6c6a9968feba83 Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Wed, 9 Feb 2022 10:07:21 +0100 Subject: [PATCH] [flang] Add missing CFI case for REAL and COMPLEX ISO_Fortran_binding.h was updated with missing entries for CFI types for REAL and COMPLEX kinds 2,3,10,16. This patch updates TypeCode.h to use these new types. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: jeanPerier Differential Revision: https://reviews.llvm.org/D119283 --- flang/include/flang/Optimizer/Support/TypeCode.h | 10 ++++++---- flang/test/Fir/convert-to-llvm.fir | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/flang/include/flang/Optimizer/Support/TypeCode.h b/flang/include/flang/Optimizer/Support/TypeCode.h index ae9e96b..fef937b 100644 --- a/flang/include/flang/Optimizer/Support/TypeCode.h +++ b/flang/include/flang/Optimizer/Support/TypeCode.h @@ -37,10 +37,11 @@ inline int characterBitsToTypeCode(unsigned bitwidth) { inline int complexBitsToTypeCode(unsigned bitwidth) { // clang-format off switch (bitwidth) { + case 16: return CFI_type_half_float_Complex; // CFI_type_bfloat_Complex ? case 32: return CFI_type_float_Complex; case 64: return CFI_type_double_Complex; - case 80: - case 128: return CFI_type_long_double_Complex; + case 80: return CFI_type_extended_double_Complex; + case 128: return CFI_type_float128_Complex; default: llvm_unreachable("unsupported complex size"); } // clang-format on @@ -74,10 +75,11 @@ inline int logicalBitsToTypeCode(unsigned bitwidth) { inline int realBitsToTypeCode(unsigned bitwidth) { // clang-format off switch (bitwidth) { + case 16: return CFI_type_half_float; // CFI_type_bfloat ? case 32: return CFI_type_float; case 64: return CFI_type_double; - case 80: - case 128: return CFI_type_long_double; + case 80: return CFI_type_extended_double; + case 128: return CFI_type_float128; default: llvm_unreachable("unsupported real size"); } // clang-format on diff --git a/flang/test/Fir/convert-to-llvm.fir b/flang/test/Fir/convert-to-llvm.fir index fc384879..ef079b6 100644 --- a/flang/test/Fir/convert-to-llvm.fir +++ b/flang/test/Fir/convert-to-llvm.fir @@ -1583,7 +1583,7 @@ func @embox_typecode2(%arg0: !fir.ref) { } // CHECK-LABEL: llvm.func @embox_typecode2 -// CHECK: %[[TYPE_CODE_F128:.*]] = llvm.mlir.constant(30 : i32) : i32 +// CHECK: %[[TYPE_CODE_F128:.*]] = llvm.mlir.constant(31 : i32) : i32 // CHECK: %[[TYPE_CODE_F128_I8:.*]] = llvm.trunc %[[TYPE_CODE_F128]] : i32 to i8 // CHECK: %{{.*}} = llvm.insertvalue %[[TYPE_CODE_F128_I8]], %{{.*}}[4 : i32] : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}})> -- 2.7.4