diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -937,6 +937,10 @@ rewriter.replaceOpWithNewOp(convert, toTy, op0); return mlir::success(); } + if (fromFirTy == i1Type) { + rewriter.replaceOpWithNewOp(convert, toTy, op0); + return mlir::success(); + } rewriter.replaceOpWithNewOp(convert, toTy, op0); return mlir::success(); } diff --git a/flang/test/Fir/convert-to-llvm.fir b/flang/test/Fir/convert-to-llvm.fir --- a/flang/test/Fir/convert-to-llvm.fir +++ b/flang/test/Fir/convert-to-llvm.fir @@ -739,6 +739,16 @@ // CHECK: %{{.*}} = llvm.sext %[[ARG0]] : i32 to i64 // CHECK: %{{.*}} = llvm.inttoptr %{{.*}} : i64 to !llvm.ptr + +func.func @convert_from_i1(%arg0 : i1) { + %0 = fir.convert %arg0 : (i1) -> i32 + return +} + +// CHECK-LABEL: convert_from_i1( +// CHECK-SAME: %[[ARG0:.*]]: i1 +// CHECK: %{{.*}} = llvm.zext %[[ARG0]] : i1 to i32 + // ----- // Test `fir.convert` operation conversion from !fir.ref<> type.