@@ -172,6 +172,78 @@ func.func @test_transpose_conv2d(%arg0: tensor<1x32x32x8xi8>, %arg1: tensor<16x1
172
172
return %0 : tensor <1 x32 x32 x16 xi8 >
173
173
}
174
174
175
+ // -----
176
+
177
+ func.func @test_transpose_conv2d_invalid_padding_top (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
178
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expected out_pad_top > -KH, but got: out_pad_top=-3 and KH=1}}
179
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : -3 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
180
+ return %0 : tensor <1 x32 x32 x16 xf32 >
181
+ }
182
+
183
+ // -----
184
+
185
+ func.func @test_transpose_conv2d_invalid_padding_bottom (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
186
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expected out_pad_bottom > -KH, but got: out_pad_bottom=-1 and KH=1}}
187
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , -1 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
188
+ return %0 : tensor <1 x32 x32 x16 xf32 >
189
+ }
190
+
191
+ // -----
192
+
193
+ func.func @test_transpose_conv2d_invalid_padding_left (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
194
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expected out_pad_left > -KW, but got: out_pad_left=-8 and KW=1}}
195
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , -8 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
196
+ return %0 : tensor <1 x32 x32 x16 xf32 >
197
+ }
198
+
199
+ // -----
200
+
201
+ func.func @test_transpose_conv2d_invalid_padding_right (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
202
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expected out_pad_right > -KW, but got: out_pad_right=-9 and KW=1}}
203
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , -9 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
204
+ return %0 : tensor <1 x32 x32 x16 xf32 >
205
+ }
206
+
207
+ // -----
208
+
209
+ func.func @test_transpose_conv2d_invalid_stride_y (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
210
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expect all stride values to be >= 1, got [0, 1]}}
211
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 0 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
212
+ return %0 : tensor <1 x32 x32 x16 xf32 >
213
+ }
214
+
215
+ // -----
216
+
217
+ func.func @test_transpose_conv2d_invalid_stride_x (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
218
+ // expected-error@+1 {{'tosa.transpose_conv2d' op expect all stride values to be >= 1, got [1, 0]}}
219
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 0 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
220
+ return %0 : tensor <1 x32 x32 x16 xf32 >
221
+ }
222
+
223
+ // -----
224
+
225
+ func.func @test_transpose_conv2d_invalid_output_height (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x33 x32 x16 xf32 > {
226
+ // expected-error@+1 {{'tosa.transpose_conv2d' op dimension mismatch: expected OH == (IH - 1) * stride_y + out_pad_top + out_pad_bottom + KH, but got 33 != (32 - 1) * 1 + 0 + 0 + 1}}
227
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 33 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x33 x32 x16 xf32 >
228
+ return %0 : tensor <1 x33 x32 x16 xf32 >
229
+ }
230
+
231
+ // -----
232
+
233
+ func.func @test_transpose_conv2d_invalid_output_width (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <16 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x40 x16 xf32 > {
234
+ // expected-error@+1 {{'tosa.transpose_conv2d' op dimension mismatch: expected OW == (IW - 1) * stride_x + out_pad_left + out_pad_right + KW, but got 40 != (32 - 1) * 1 + 0 + 0 + 1}}
235
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 40 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <16 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x40 x16 xf32 >
236
+ return %0 : tensor <1 x32 x40 x16 xf32 >
237
+ }
238
+
239
+ // -----
240
+
241
+ func.func @test_transpose_conv2d_invalid_bias (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <16 x1 x1 x8 xf32 >, %arg2: tensor <5 xf32 >, %arg3: tensor <1 xf32 >, %arg4: tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 > {
242
+ // expected-error@+1 {{'tosa.transpose_conv2d' op bias channels expected to be equal to output channels (16) or 1, got 5}}
243
+ %0 = tosa.transpose_conv2d %arg0 , %arg1 , %arg2 , %arg3 , %arg4 {acc_type = f32 , out_pad = array<i64 : 0 , 0 , 0 , 0 >, out_shape = array<i64 : 1 , 32 , 32 , 16 >, stride = array<i64 : 1 , 1 >} : (tensor <1 x32 x32 x8 xf32 >, tensor <16 x1 x1 x8 xf32 >, tensor <5 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x16 xf32 >
244
+ return %0 : tensor <1 x32 x32 x16 xf32 >
245
+ }
246
+
175
247
// -----
176
248
// CHECK-LABEL: conv2d_quant_any_acc
177
249
func.func @test_conv2d_quant_any_acc (%arg0: tensor <1 x4 x4 x4 x!quant.any <i8 <-8 :7 >>>, %arg1: tensor <8 x1 x1 x4 x!quant.any <i8 <-8 :7 >>>, %arg2: tensor <8 x!quant.any <i8 <-8 :7 >>>) -> tensor <1 x4 x4 x8 x!quant.any <i8 <-8 :7 >>> {
0 commit comments