[flang-commits] [flang] afcaccc - [fir] Add !fir.vector type conversion

Valentin Clement via flang-commits flang-commits at lists.llvm.org
Thu Nov 11 02:22:04 PST 2021


Author: Valentin Clement
Date: 2021-11-11T11:21:55+01:00
New Revision: afcacccd5adc5ef79f50590f842c276b2979449f

URL: https://github.com/llvm/llvm-project/commit/afcacccd5adc5ef79f50590f842c276b2979449f
DIFF: https://github.com/llvm/llvm-project/commit/afcacccd5adc5ef79f50590f842c276b2979449f.diff

LOG: [fir] Add !fir.vector type conversion

This patch adds the !fir.vector type conversion. The type is converted
to the builtin vector type.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: kiranchandramohan

Differential Revision: https://reviews.llvm.org/D113657

Co-authored-by: Eric Schweitz <eschweitz at nvidia.com>

Added: 
    

Modified: 
    flang/lib/Optimizer/CodeGen/TypeConverter.h
    flang/test/Fir/types-to-llvm.fir

Removed: 
    


################################################################################
diff  --git a/flang/lib/Optimizer/CodeGen/TypeConverter.h b/flang/lib/Optimizer/CodeGen/TypeConverter.h
index a9129953797e..d35d20e61d7f 100644
--- a/flang/lib/Optimizer/CodeGen/TypeConverter.h
+++ b/flang/lib/Optimizer/CodeGen/TypeConverter.h
@@ -66,8 +66,13 @@ class LLVMTypeConverter : public mlir::LLVMTypeConverter {
         [&](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<int64_t>(vecTy.getLen()),
+                                   convertType(vecTy.getEleTy()));
+    });
     addConversion([&](mlir::TupleType tuple) {
       LLVM_DEBUG(llvm::dbgs() << "type convert: " << tuple << '\n');
       llvm::SmallVector<mlir::Type> inMembers;

diff  --git a/flang/test/Fir/types-to-llvm.fir b/flang/test/Fir/types-to-llvm.fir
index 921ac355d08f..97958e2eb7aa 100644
--- a/flang/test/Fir/types-to-llvm.fir
+++ b/flang/test/Fir/types-to-llvm.fir
@@ -131,3 +131,75 @@ func private @foo4(%arg0: !fir.complex<10>)
 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>


        


More information about the flang-commits mailing list