summaryrefslogtreecommitdiffstats
path: root/mlir/test/Conversion
diff options
context:
space:
mode:
authorAart Bik <ajcbik@google.com>2019-12-16 09:52:13 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-16 09:52:46 -0800
commitcd5dab8ad7fccc3b3e371ff37cb20ebfb4368d3f (patch)
tree2739c91c722ffe31b0cab6245441658fc0b663a5 /mlir/test/Conversion
parent73ec37c8bbc73632d73318c702abb78c758d93db (diff)
downloadbcm5719-llvm-cd5dab8ad7fccc3b3e371ff37cb20ebfb4368d3f.tar.gz
bcm5719-llvm-cd5dab8ad7fccc3b3e371ff37cb20ebfb4368d3f.zip
[VectorOps] Add [insert/extract]element definition together with lowering to LLVM
Similar to insert/extract vector instructions but (1) work on 1-D vectors only (2) allow for a dynamic index %c3 = constant 3 : index %0 = vector.insertelement %arg0, %arg1[%c : index] : vector<4xf32> %1 = vector.extractelement %arg0[%c3 : index] : vector<4xf32> PiperOrigin-RevId: 285792205
Diffstat (limited to 'mlir/test/Conversion')
-rw-r--r--mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir20
1 files changed, 20 insertions, 0 deletions
diff --git a/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir b/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir
index 0c4b23f2067..73aba05b3b3 100644
--- a/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir
+++ b/mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir
@@ -280,6 +280,16 @@ func @shuffle_2D(%a: vector<1x4xf32>, %b: vector<2x4xf32>) -> vector<3x4xf32> {
// CHECK: %[[i3:.*]] = llvm.insertvalue %[[e3]], %[[i2]][2] : !llvm<"[3 x <4 x float>]">
// CHECK: llvm.return %[[i3]] : !llvm<"[3 x <4 x float>]">
+func @extract_element(%arg0: vector<16xf32>) -> f32 {
+ %0 = constant 15 : index
+ %1 = vector.extractelement %arg0[%0 : index]: vector<16xf32>
+ return %1 : f32
+}
+// CHECK-LABEL: extract_element(%arg0: !llvm<"<16 x float>">)
+// CHECK: %[[c:.*]] = llvm.mlir.constant(15 : index) : !llvm.i64
+// CHECK: %[[x:.*]] = llvm.extractelement %arg0[%[[c]] : !llvm.i64] : !llvm<"<16 x float>">
+// CHECK: llvm.return %[[x]] : !llvm.float
+
func @extract_element_from_vec_1d(%arg0: vector<16xf32>) -> f32 {
%0 = vector.extract %arg0[15 : i32]: vector<16xf32>
return %0 : f32
@@ -315,6 +325,16 @@ func @extract_element_from_vec_3d(%arg0: vector<4x3x16xf32>) -> f32 {
// CHECK: llvm.extractelement {{.*}}[{{.*}} : !llvm.i32] : !llvm<"<16 x float>">
// CHECK: llvm.return {{.*}} : !llvm.float
+func @insert_element(%arg0: f32, %arg1: vector<4xf32>) -> vector<4xf32> {
+ %0 = constant 3 : index
+ %1 = vector.insertelement %arg0, %arg1[%0 : index] : vector<4xf32>
+ return %1 : vector<4xf32>
+}
+// CHECK-LABEL: insert_element(%arg0: !llvm.float, %arg1: !llvm<"<4 x float>">)
+// CHECK: %[[c:.*]] = llvm.mlir.constant(3 : index) : !llvm.i64
+// CHECK: %[[x:.*]] = llvm.insertelement %arg0, %arg1[%[[c]] : !llvm.i64] : !llvm<"<4 x float>">
+// CHECK: llvm.return %[[x]] : !llvm<"<4 x float>">
+
func @insert_element_into_vec_1d(%arg0: f32, %arg1: vector<4xf32>) -> vector<4xf32> {
%0 = vector.insert %arg0, %arg1[3 : i32] : f32 into vector<4xf32>
return %0 : vector<4xf32>
OpenPOWER on IntegriCloud