60 lines · plain
1// RUN: cir-opt %s -cir-canonicalize -o - -split-input-file | FileCheck %s2 3!s32i = !cir.int<s, 32>4!s64i = !cir.int<s, 64>5 6module {7 cir.func @fold_shuffle_vector_op_test() -> !cir.vector<4 x !s32i> {8 %vec_1 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i]> : !cir.vector<4 x !s32i>9 %vec_2 = cir.const #cir.const_vector<[#cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i, #cir.int<8> : !s32i]> : !cir.vector<4 x !s32i>10 %new_vec = cir.vec.shuffle(%vec_1, %vec_2 : !cir.vector<4 x !s32i>) [#cir.int<0> : !s64i, #cir.int<4> : !s64i,11 #cir.int<1> : !s64i, #cir.int<5> : !s64i] : !cir.vector<4 x !s32i>12 cir.return %new_vec : !cir.vector<4 x !s32i>13 }14 15 // CHECK: cir.func{{.*}} @fold_shuffle_vector_op_test() -> !cir.vector<4 x !s32i> {16 // CHECK-NEXT: %[[RES:.*]] = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i,17 // CHECK-SAME: #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>18 // CHECK-NEXT: cir.return %[[RES]] : !cir.vector<4 x !s32i>19}20 21// -----22 23!s32i = !cir.int<s, 32>24!s64i = !cir.int<s, 64>25 26module {27 cir.func @fold_shuffle_vector_op_test() -> !cir.vector<6 x !s32i> {28 %vec_1 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i]> : !cir.vector<4 x !s32i>29 %vec_2 = cir.const #cir.const_vector<[#cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i, #cir.int<8> : !s32i]> : !cir.vector<4 x !s32i>30 %new_vec = cir.vec.shuffle(%vec_1, %vec_2 : !cir.vector<4 x !s32i>) [#cir.int<0> : !s64i, #cir.int<4> : !s64i,31 #cir.int<1> : !s64i, #cir.int<5> : !s64i, #cir.int<2> : !s64i, #cir.int<6> : !s64i] : !cir.vector<6 x !s32i>32 cir.return %new_vec : !cir.vector<6 x !s32i>33 }34 35 // CHECK: cir.func{{.*}} @fold_shuffle_vector_op_test() -> !cir.vector<6 x !s32i> {36 // CHECK-NEXT: %[[RES:.*]] = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i,37 // CHECK-SAME: #cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i]> : !cir.vector<6 x !s32i>38 // CHECK-NEXT: cir.return %[[RES]] : !cir.vector<6 x !s32i>39}40 41// -----42 43!s32i = !cir.int<s, 32>44!s64i = !cir.int<s, 64>45 46module {47 cir.func @fold_shuffle_vector_op_test() -> !cir.vector<4 x !s32i> {48 %vec_1 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i]> : !cir.vector<4 x !s32i>49 %vec_2 = cir.const #cir.const_vector<[#cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i, #cir.int<8> : !s32i]> : !cir.vector<4 x !s32i>50 %new_vec = cir.vec.shuffle(%vec_1, %vec_2 : !cir.vector<4 x !s32i>) [#cir.int<-1> : !s64i, #cir.int<4> : !s64i,51 #cir.int<1> : !s64i, #cir.int<5> : !s64i] : !cir.vector<4 x !s32i>52 cir.return %new_vec : !cir.vector<4 x !s32i>53 }54 55 // CHECK: cir.func{{.*}} @fold_shuffle_vector_op_test() -> !cir.vector<4 x !s32i> {56 // CHECK: cir.const #cir.const_vector<[#cir.undef : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i,57 // CHECK-SAME: #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>58 // CHECK-NEXT: cir.return %[[RES]] : !cir.vector<4 x !s32i>59}60