78 lines · plain
1// RUN: mlir-opt %s --test-vector-shuffle-lowering --split-input-file | FileCheck %s2 3// CHECK-LABEL: func.func @shuffle_smaller_lhs_arbitrary4// CHECK-SAME: %[[LHS:.*]]: vector<2xf32>, %[[RHS:.*]]: vector<4xf32>5func.func @shuffle_smaller_lhs_arbitrary(%lhs: vector<2xf32>, %rhs: vector<4xf32>) -> vector<5xf32> {6 // CHECK: %[[PROMOTE_LHS:.*]] = vector.shuffle %[[LHS]], %[[LHS]] [0, 1, -1, -1] : vector<2xf32>, vector<2xf32>7 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[PROMOTE_LHS]], %[[RHS]] [1, 5, 0, 6, 7] : vector<4xf32>, vector<4xf32>8 // CHECK: return %[[RESULT]] : vector<5xf32>9 %0 = vector.shuffle %lhs, %rhs [1, 3, 0, 4, 5] : vector<2xf32>, vector<4xf32>10 return %0 : vector<5xf32>11}12 13// -----14 15// CHECK-LABEL: func.func @shuffle_smaller_rhs_arbitrary16// CHECK-SAME: %[[LHS:.*]]: vector<4xi32>, %[[RHS:.*]]: vector<2xi32>17func.func @shuffle_smaller_rhs_arbitrary(%lhs: vector<4xi32>, %rhs: vector<2xi32>) -> vector<6xi32> {18 // CHECK: %[[PROMOTE_RHS:.*]] = vector.shuffle %[[RHS]], %[[RHS]] [0, 1, -1, -1] : vector<2xi32>, vector<2xi32>19 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[LHS]], %[[PROMOTE_RHS]] [3, 5, 1, 4, 0, 2] : vector<4xi32>, vector<4xi32>20 // CHECK: return %[[RESULT]] : vector<6xi32>21 %0 = vector.shuffle %lhs, %rhs [3, 5, 1, 4, 0, 2] : vector<4xi32>, vector<2xi32>22 return %0 : vector<6xi32>23}24 25// -----26 27// CHECK-LABEL: func.func @shuffle_smaller_lhs_concat28// CHECK-SAME: %[[LHS:.*]]: vector<3xf64>, %[[RHS:.*]]: vector<5xf64>29func.func @shuffle_smaller_lhs_concat(%lhs: vector<3xf64>, %rhs: vector<5xf64>) -> vector<8xf64> {30 // CHECK: %[[PROMOTE_LHS:.*]] = vector.shuffle %[[LHS]], %[[LHS]] [0, 1, 2, -1, -1] : vector<3xf64>, vector<3xf64>31 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[PROMOTE_LHS]], %[[RHS]] [0, 1, 2, 5, 6, 7, 8, 9] : vector<5xf64>, vector<5xf64>32 // CHECK: return %[[RESULT]] : vector<8xf64>33 %0 = vector.shuffle %lhs, %rhs [0, 1, 2, 3, 4, 5, 6, 7] : vector<3xf64>, vector<5xf64>34 return %0 : vector<8xf64>35}36 37// -----38 39// CHECK-LABEL: func.func @shuffle_smaller_rhs_concat40// CHECK-SAME: %[[LHS:.*]]: vector<4xi16>, %[[RHS:.*]]: vector<2xi16>41func.func @shuffle_smaller_rhs_concat(%lhs: vector<4xi16>, %rhs: vector<2xi16>) -> vector<6xi16> {42 // CHECK: %[[PROMOTE_RHS:.*]] = vector.shuffle %[[RHS]], %[[RHS]] [0, 1, -1, -1] : vector<2xi16>, vector<2xi16>43 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[LHS]], %[[PROMOTE_RHS]] [0, 1, 2, 3, 4, 5] : vector<4xi16>, vector<4xi16>44 // CHECK: return %[[RESULT]] : vector<6xi16>45 %0 = vector.shuffle %lhs, %rhs [0, 1, 2, 3, 4, 5] : vector<4xi16>, vector<2xi16>46 return %0 : vector<6xi16>47}48 49// -----50 51// Test that shuffles with same size inputs are not modified.52 53// CHECK-LABEL: func.func @negative_shuffle_same_input_sizes54// CHECK-SAME: %[[LHS:.*]]: vector<4xf32>, %[[RHS:.*]]: vector<4xf32>55func.func @negative_shuffle_same_input_sizes(%lhs: vector<4xf32>, %rhs: vector<4xf32>) -> vector<6xf32> {56 // CHECK-NOT: vector.shuffle %[[LHS]], %[[LHS]]57 // CHECK-NOT: vector.shuffle %[[RHS]], %[[RHS]]58 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[LHS]], %[[RHS]] [0, 1, 4, 5, 2, 6] : vector<4xf32>, vector<4xf32>59 // CHECK: return %[[RESULT]] : vector<6xf32>60 %0 = vector.shuffle %lhs, %rhs [0, 1, 4, 5, 2, 6] : vector<4xf32>, vector<4xf32>61 return %0 : vector<6xf32>62}63 64// -----65 66// Test that multi-dimensional shuffles are not modified.67 68// CHECK-LABEL: func.func @negative_shuffle_2d_vectors69// CHECK-SAME: %[[LHS:.*]]: vector<2x4xf32>, %[[RHS:.*]]: vector<3x4xf32>70func.func @negative_shuffle_2d_vectors(%lhs: vector<2x4xf32>, %rhs: vector<3x4xf32>) -> vector<4x4xf32> {71 // CHECK-NOT: vector.shuffle %[[LHS]], %[[LHS]]72 // CHECK-NOT: vector.shuffle %[[RHS]], %[[RHS]]73 // CHECK: %[[RESULT:.*]] = vector.shuffle %[[LHS]], %[[RHS]] [0, 1, 2, 3] : vector<2x4xf32>, vector<3x4xf32>74 // CHECK: return %[[RESULT]] : vector<4x4xf32>75 %0 = vector.shuffle %lhs, %rhs [0, 1, 2, 3] : vector<2x4xf32>, vector<3x4xf32>76 return %0 : vector<4x4xf32>77}78