diff options
Diffstat (limited to 'mlir/test/Conversion')
-rw-r--r-- | mlir/test/Conversion/VectorToArmSME/unsupported.mlir | 51 | ||||
-rw-r--r-- | mlir/test/Conversion/VectorToArmSME/vector-to-arm-sme.mlir | 36 |
2 files changed, 86 insertions, 1 deletions
diff --git a/mlir/test/Conversion/VectorToArmSME/unsupported.mlir b/mlir/test/Conversion/VectorToArmSME/unsupported.mlir index 8ed52cd..ff7b4bc 100644 --- a/mlir/test/Conversion/VectorToArmSME/unsupported.mlir +++ b/mlir/test/Conversion/VectorToArmSME/unsupported.mlir @@ -192,3 +192,54 @@ func.func @vector_outerproduct_unknown_mask(%lhs : vector<[4]xf32>, %rhs : vecto %0 = vector.mask %mask { vector.outerproduct %lhs, %rhs, %acc {kind = #vector.kind<add>} : vector<[4]xf32>, vector<[4]xf32> } : vector<[4]x[4]xi1> -> vector<[4]x[4]xf32> "prevent.dce"(%0) : (vector<[4]x[4]xf32>) -> () } + +// ----- + +/// Not SVE predicate-sized. + +// CHECK-LABEL: @negative_vector_extract_to_psel_0 +func.func @negative_vector_extract_to_psel_0(%a: index, %b: index, %index: index) -> vector<[32]xi1> +{ + // CHECK-NOT: arm_sve.psel + %mask = vector.create_mask %a, %b : vector<[4]x[32]xi1> + %slice = vector.extract %mask[%index] : vector<[32]xi1> from vector<[4]x[32]xi1> + return %slice : vector<[32]xi1> +} + +// ----- + +/// Source not 2-D scalable mask. + +// CHECK-LABEL: @negative_vector_extract_to_psel_1 +func.func @negative_vector_extract_to_psel_1(%a: index, %b: index, %index: index) -> vector<[8]xi1> +{ + // CHECK-NOT: arm_sve.psel + %mask = vector.create_mask %a, %b : vector<4x[8]xi1> + %slice = vector.extract %mask[%index] : vector<[8]xi1> from vector<4x[8]xi1> + return %slice : vector<[8]xi1> +} + +// ----- + +/// Source not vector.create_mask. + +// CHECK-LABEL: @negative_vector_extract_to_psel_2 +func.func @negative_vector_extract_to_psel_2(%mask: vector<[4]x[8]xi1>, %index: index) -> vector<[8]xi1> +{ + // CHECK-NOT: arm_sve.psel + %slice = vector.extract %mask[%index] : vector<[8]xi1> from vector<[4]x[8]xi1> + return %slice : vector<[8]xi1> +} + +// ----- + +/// Not psel-like extract. + +// CHECK-LABEL: @negative_vector_extract_to_psel_3 +func.func @negative_vector_extract_to_psel_3(%a: index, %b: index, %index: index) -> i1 +{ + // CHECK-NOT: arm_sve.psel + %mask = vector.create_mask %a, %b : vector<[4]x[8]xi1> + %el = vector.extract %mask[2, %index] : i1 from vector<[4]x[8]xi1> + return %el : i1 +} diff --git a/mlir/test/Conversion/VectorToArmSME/vector-to-arm-sme.mlir b/mlir/test/Conversion/VectorToArmSME/vector-to-arm-sme.mlir index 8aeffb0..068fd0d 100644 --- a/mlir/test/Conversion/VectorToArmSME/vector-to-arm-sme.mlir +++ b/mlir/test/Conversion/VectorToArmSME/vector-to-arm-sme.mlir @@ -1124,7 +1124,7 @@ func.func @vector_insert_element_f64(%el: f64, %row: index, %col: index) -> vect } //===----------------------------------------------------------------------===// -// vector.extract +// vector.extract --> arm_sme.move_tile_slice_to_vector //===----------------------------------------------------------------------===// // ----- @@ -1320,3 +1320,37 @@ func.func @vector_extract_element_f64(%row: index, %col: index) -> f64 { %el = vector.extract %tile[%row, %col] : f64 from vector<[2]x[2]xf64> return %el : f64 } + +//===----------------------------------------------------------------------===// +// vector.extract --> arm_sve.psel +//===----------------------------------------------------------------------===// + +// ----- + +// CHECK-LABEL: @dynamic_vector_extract_mask_to_psel( +// CHECK-SAME: %[[A:.*]]: index, %[[B:.*]]: index, %[[INDEX:.*]]: index) +func.func @dynamic_vector_extract_mask_to_psel(%a: index, %b: index, %index: index) -> vector<[8]xi1> +{ + // CHECK: %[[MASK_ROWS:.*]] = vector.create_mask %[[A]] : vector<[4]xi1> + // CHECK: %[[MASK_COLS:.*]] = vector.create_mask %[[B]] : vector<[8]xi1> + // CHECK: arm_sve.psel %[[MASK_COLS]], %[[MASK_ROWS]][%[[INDEX]]] : vector<[8]xi1>, vector<[4]xi1> + %mask = vector.create_mask %a, %b : vector<[4]x[8]xi1> + %slice = vector.extract %mask[%index] : vector<[8]xi1> from vector<[4]x[8]xi1> + return %slice : vector<[8]xi1> +} + +// ----- + +// CHECK-LABEL: @vector_extract_mask_to_psel( +// CHECK-SAME: %[[A:.*]]: index, +// CHECK-SAME: %[[B:.*]]: index) +func.func @vector_extract_mask_to_psel(%a: index, %b: index) -> vector<[2]xi1> +{ + // CHECK: %[[C1:.*]] = arith.constant 1 : index + // CHECK: %[[MASK_ROWS:.*]] = vector.create_mask %[[A]] : vector<[16]xi1> + // CHECK: %[[MASK_COLS:.*]] = vector.create_mask %[[B]] : vector<[2]xi1> + // CHECK: arm_sve.psel %[[MASK_COLS]], %[[MASK_ROWS]][%[[C1]]] : vector<[2]xi1>, vector<[16]xi1> + %mask = vector.create_mask %a, %b : vector<[16]x[2]xi1> + %slice = vector.extract %mask[1] : vector<[2]xi1> from vector<[16]x[2]xi1> + return %slice : vector<[2]xi1> +} |