@@ -15,7 +15,7 @@ cir.global external @vec_b = #cir.zero : !cir.vector<4 x !cir.array<!s32i x 10>>
1515!s64i = !cir.int<s, 64>
1616
1717module  {
18-   cir.func @invalid_vector_shuffle () {
18+   cir.func @vector_shuffle_invalid_element_type () {
1919    %1 = cir.const #cir.int<1> : !s32i
2020    %2 = cir.const #cir.int<2> : !s32i
2121    %3 = cir.const #cir.int<3> : !s32i
@@ -34,7 +34,7 @@ module  {
3434!s64i = !cir.int<s, 64>
3535
3636module  {
37-   cir.func @invalid_vector_shuffle () {
37+   cir.func @vector_shuffle_different_number_of_elements () {
3838    %1 = cir.const #cir.int<1> : !s32i
3939    %2 = cir.const #cir.int<2> : !s32i
4040    %3 = cir.const #cir.int<3> : !s32i
@@ -46,3 +46,104 @@ module  {
4646    cir.return
4747  }
4848}
49+ 
50+ // -----
51+ 
52+ !s32i = !cir.int<s, 32>
53+ 
54+ module  {
55+   cir.func @vector_create_different_size() {
56+     %1 = cir.const #cir.int<1> : !s32i
57+     %2 = cir.const #cir.int<2> : !s32i
58+     %3 = cir.const #cir.int<3> : !s32i
59+     %4 = cir.const #cir.int<4> : !s32i
60+ 
61+     // expected-error @below {{operand count of 4 doesn't match vector type '!cir.vector<8 x !cir.int<s, 32>>' element count of 8}}
62+     %5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<8 x !s32i>
63+     cir.return
64+   }
65+ }
66+ 
67+ // -----
68+ 
69+ !s32i = !cir.int<s, 32>
70+ !s64i = !cir.int<s, 64>
71+ 
72+ module  {
73+   cir.func @vector_create_different_type_size() {
74+     %1 = cir.const #cir.int<1> : !s32i
75+     %2 = cir.const #cir.int<2> : !s32i
76+     %3 = cir.const #cir.int<3> : !s32i
77+     %4 = cir.const #cir.int<4> : !s64i
78+ 
79+     // expected-error @below {{operand type '!cir.int<s, 64>' doesn't match vector element type '!cir.int<s, 32>'}}
80+     %5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s64i) : !cir.vector<4 x !s32i>
81+     cir.return
82+   }
83+ }
84+ 
85+ // -----
86+ 
87+ !s32i = !cir.int<s, 32>
88+ 
89+ module  {
90+   cir.func @vector_shift_invalid_result_type() {
91+     %1 = cir.const #cir.int<1> : !s32i
92+     %2 = cir.const #cir.int<2> : !s32i
93+     %3 = cir.const #cir.int<3> : !s32i
94+     %4 = cir.const #cir.int<4> : !s32i
95+     %5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
96+     %6 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
97+     // expected-error @below {{the type of the result must be a vector if it is vector shift}}
98+     %7 = cir.shift(left, %5 : !cir.vector<4 x !s32i>, %6 : !cir.vector<4 x !s32i>) -> !s32i
99+     cir.return
100+   }
101+ }
102+ 
103+ // -----
104+ 
105+ !s32i = !cir.int<s, 32>
106+ !s64i = !cir.int<s, 64>
107+ 
108+ module  {
109+   cir.func @vector_shuffle_dynamic_different_number_of_elements() {
110+     %1 = cir.const #cir.int<1> : !s32i
111+     %2 = cir.const #cir.int<2> : !s32i
112+     %3 = cir.const #cir.int<3> : !s32i
113+     %4 = cir.const #cir.int<4> : !s32i
114+     %vec = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
115+     %indices = cir.vec.create(%1, %2 : !s32i, !s32i) : !cir.vector<2 x !s32i>
116+ 
117+     // expected-error @below {{the number of elements in '!cir.vector<4 x !cir.int<s, 32>>' and '!cir.vector<2 x !cir.int<s, 32>>' don't match}}
118+     %new_vec = cir.vec.shuffle.dynamic %vec : !cir.vector<4 x !s32i>, %indices : !cir.vector<2 x !s32i>
119+     cir.return
120+   }
121+ }
122+ 
123+ // -----
124+ 
125+ !s32i = !cir.int<s, 32>
126+ !s64i = !cir.int<s, 64>
127+ 
128+ module  {
129+   cir.func @vector_shuffle_invalid_index_value() -> !cir.vector<4 x !s32i> {
130+     %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>
131+     %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>
132+ 
133+     // expected-error @below {{index for __builtin_shufflevector must be less than the total number of vector elements}}
134+     %new_vec = cir.vec.shuffle(%vec_1, %vec_2 : !cir.vector<4 x !s32i>) [#cir.int<9> : !s64i, #cir.int<4> : !s64i,
135+       #cir.int<1> : !s64i, #cir.int<5> : !s64i] : !cir.vector<4 x !s32i>
136+     cir.return %new_vec : !cir.vector<4 x !s32i>
137+   }
138+ }
139+ 
140+ // -----
141+ 
142+ !s32i = !cir.int<s, 32>
143+ 
144+ module  {
145+ 
146+ // expected-error @below {{the number of vector elements must be non-zero}}
147+ cir.global external @vec_a = #cir.zero : !cir.vector<0 x !s32i>
148+ 
149+ }
0 commit comments