diff options
| author | Aart Bik <ajcbik@google.com> | 2019-12-16 09:52:13 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-16 09:52:46 -0800 |
| commit | cd5dab8ad7fccc3b3e371ff37cb20ebfb4368d3f (patch) | |
| tree | 2739c91c722ffe31b0cab6245441658fc0b663a5 /mlir/test/Conversion | |
| parent | 73ec37c8bbc73632d73318c702abb78c758d93db (diff) | |
| download | bcm5719-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.mlir | 20 |
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> |

