diff --git a/flang/lib/Optimizer/Builder/FIRBuilder.cpp b/flang/lib/Optimizer/Builder/FIRBuilder.cpp index 020d6c7b27eb1..8ffff7ad7809a 100644 --- a/flang/lib/Optimizer/Builder/FIRBuilder.cpp +++ b/flang/lib/Optimizer/Builder/FIRBuilder.cpp @@ -70,6 +70,8 @@ mlir::Type fir::FirOpBuilder::getRealType(int kind) { switch (kindMap.getRealTypeID(kind)) { case llvm::Type::TypeID::HalfTyID: return mlir::FloatType::getF16(getContext()); + case llvm::Type::TypeID::BFloatTyID: + return mlir::FloatType::getBF16(getContext()); case llvm::Type::TypeID::FloatTyID: return mlir::FloatType::getF32(getContext()); case llvm::Type::TypeID::DoubleTyID: diff --git a/flang/test/Lower/complex-real.f90 b/flang/test/Lower/complex-real.f90 new file mode 100644 index 0000000000000..72bd3cf300970 --- /dev/null +++ b/flang/test/Lower/complex-real.f90 @@ -0,0 +1,15 @@ +! RUN: bbc -emit-fir %s -o - | FileCheck %s +! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s + +! CHECK-LABEL: @_QPsb_complex_bfloat +! CHECK: %[[C_REF:.*]] = fir.alloca !fir.complex<3> {bindc_name = "c", uniq_name = "_QFsb_complex_bfloatEc"} +! CHECK: %[[R_REF:.*]] = fir.alloca bf16 {bindc_name = "r", uniq_name = "_QFsb_complex_bfloatEr"} +! CHECK: %[[R_VAL:.*]] = fir.load %[[R_REF]] : !fir.ref +! CHECK: %[[C0:.*]] = arith.constant 0 : i32 +! CHECK: %[[CREAL_REF:.*]] = fir.coordinate_of %[[C_REF]], %[[C0]] : (!fir.ref>, i32) -> !fir.ref +! CHECK: fir.store %[[R_VAL]] to %[[CREAL_REF]] : !fir.ref +subroutine sb_complex_bfloat + complex(kind=3) :: c + real(kind=3) :: r + c%re = r +end subroutine