brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · a137811 Raw
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