diff --git a/flang/lib/Optimizer/CodeGen/TypeConverter.h b/flang/lib/Optimizer/CodeGen/TypeConverter.h --- a/flang/lib/Optimizer/CodeGen/TypeConverter.h +++ b/flang/lib/Optimizer/CodeGen/TypeConverter.h @@ -66,8 +66,13 @@ [&](fir::RealType real) { return convertRealType(real.getFKind()); }); addConversion( [&](fir::ReferenceType ref) { return convertPointerLike(ref); }); - addConversion( - [&](SequenceType sequence) { return convertSequenceType(sequence); }); + addConversion([&](fir::SequenceType sequence) { + return convertSequenceType(sequence); + }); + addConversion([&](fir::VectorType vecTy) { + return mlir::VectorType::get(llvm::ArrayRef(vecTy.getLen()), + convertType(vecTy.getEleTy())); + }); addConversion([&](mlir::TupleType tuple) { LLVM_DEBUG(llvm::dbgs() << "type convert: " << tuple << '\n'); llvm::SmallVector inMembers; diff --git a/flang/test/Fir/types-to-llvm.fir b/flang/test/Fir/types-to-llvm.fir --- a/flang/test/Fir/types-to-llvm.fir +++ b/flang/test/Fir/types-to-llvm.fir @@ -131,3 +131,75 @@ func private @foo5(%arg0: !fir.complex<16>) // CHECK-LABEL: foo5 // CHECK-SAME: !llvm.struct<(f128, f128)>) + +// ----- + +// Test `!fir.vector<>` conversion. + +func private @foo0(%arg0: !fir.vector<2:f16>) +// CHECK-LABEL: foo0 +// CHECK-SAME: vector<2xf16> + +func private @foo1(%arg0: !fir.vector<20:bf16>) +// CHECK-LABEL: foo1 +// CHECK-SAME: vector<20xbf16> + +func private @foo2(%arg0: !fir.vector<30:f32>) +// CHECK-LABEL: foo2 +// CHECK-SAME: vector<30xf32> + +func private @foo3(%arg0: !fir.vector<55:f64>) +// CHECK-LABEL: foo3 +// CHECK-SAME: vector<55xf64> + +func private @foo4(%arg0: !fir.vector<15:f80>) +// CHECK-LABEL: foo4 +// CHECK-SAME: vector<15xf80> + +func private @foo5(%arg0: !fir.vector<28:f128>) +// CHECK-LABEL: foo5 +// CHECK-SAME: vector<28xf128> + +func private @foo6(%arg0: !fir.vector<100:i1>) +// CHECK-LABEL: foo6 +// CHECK-SAME: vector<100xi1> + +func private @foo7(%arg0: !fir.vector<10:i8>) +// CHECK-LABEL: foo7 +// CHECK-SAME: vector<10xi8> + +func private @foo8(%arg0: !fir.vector<12:i16>) +// CHECK-LABEL: foo8 +// CHECK-SAME: vector<12xi16> + +func private @foo9(%arg0: !fir.vector<20:i32>) +// CHECK-LABEL: foo9 +// CHECK-SAME: vector<20xi32> + +func private @foo10(%arg0: !fir.vector<30:i64>) +// CHECK-LABEL: foo10 +// CHECK-SAME: vector<30xi64> + +func private @foo11(%arg0: !fir.vector<2:!fir.real<2>>) +// CHECK-LABEL: foo11 +// CHECK-SAME: vector<2xf16> + +func private @foo12(%arg0: !fir.vector<2:!fir.real<3>>) +// CHECK-LABEL: foo12 +// CHECK-SAME: vector<2xbf16> + +func private @foo13(%arg0: !fir.vector<2:!fir.real<4>>) +// CHECK-LABEL: foo13 +// CHECK-SAME: vector<2xf32> + +func private @foo14(%arg0: !fir.vector<2:!fir.real<8>>) +// CHECK-LABEL: foo14 +// CHECK-SAME: vector<2xf64> + +func private @foo15(%arg0: !fir.vector<2:!fir.real<10>>) +// CHECK-LABEL: foo15 +// CHECK-SAME: vector<2xf80> + +func private @foo16(%arg0: !fir.vector<2:!fir.real<16>>) +// CHECK-LABEL: foo16 +// CHECK-SAME: vector<2xf128>