@@ -1717,3 +1717,102 @@ func.func @test_negate_output_zp_non_zero(%arg0: tensor<1x16x16x8xf32>) -> tenso
1717
1717
: (tensor <1 x16 x16 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x16 x16 x8 xf32 >
1718
1718
return %0 : tensor <1 x16 x16 x8 xf32 >
1719
1719
}
1720
+
1721
+ // -----
1722
+
1723
+ func.func @test_avgpool2d_invalid_kernel (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1724
+ // expected-error@+1 {{'tosa.avg_pool2d' op expect all kernel values to be >= 1, got 0, -1}}
1725
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 0 , -1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1726
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1727
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1728
+ }
1729
+
1730
+ // -----
1731
+
1732
+ func.func @test_avgpool2d_invalid_stride (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1733
+ // expected-error@+1 {{'tosa.avg_pool2d' op expect all stride values to be >= 1, got 1, 0}}
1734
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 0 >, acc_type = f32 } :
1735
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1736
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1737
+ }
1738
+
1739
+ // -----
1740
+
1741
+ func.func @test_avgpool2d_invalid_padding (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1742
+ // expected-error@+1 {{'tosa.avg_pool2d' op expect all padding values to be >= 0, got 0, 0, 0, -1}}
1743
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , -1 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1744
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1745
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1746
+ }
1747
+
1748
+ // -----
1749
+
1750
+ func.func @test_avgpool2d_padding_not_less_than_kernel_x (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1751
+ // expected-error@+1 {{'tosa.avg_pool2d' op expected left/right padding to be less than the width of the kernel, got pad_left=0, pad_right=1, kernel_x=1}}
1752
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 1 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1753
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1754
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1755
+ }
1756
+
1757
+ // -----
1758
+
1759
+ func.func @test_avgpool2d_padding_not_less_than_kernel_y (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1760
+ // expected-error@+1 {{'tosa.avg_pool2d' op expected top/bottom padding to be less than the height of the kernel, got pad_top=2, pad_bottom=0, kernel_y=1}}
1761
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 2 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1762
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1763
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1764
+ }
1765
+
1766
+ // -----
1767
+
1768
+ func.func @test_avgpool2d_wholly_divisible_height (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1769
+ // expected-error@+1 {{'tosa.avg_pool2d' op expected input_height + pad_top + pad_bottom - kernel_y to be wholly divisible by stride_y, got (32 + 0 + 0 - 1) / 2}}
1770
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 2 , 1 >, acc_type = f32 } :
1771
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1772
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1773
+ }
1774
+
1775
+ // -----
1776
+
1777
+ func.func @test_avgpool2d_wholly_divisible_width (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 > {
1778
+ // expected-error@+1 {{'tosa.avg_pool2d' op expected input_width + pad_left + pad_right - kernel_x to be wholly divisible by stride_x, got (32 + 0 + 0 - 1) / 2}}
1779
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 2 >, acc_type = f32 } :
1780
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x32 x32 x8 xf32 >
1781
+ return %0 : tensor <1 x32 x32 x8 xf32 >
1782
+ }
1783
+
1784
+ // -----
1785
+
1786
+ func.func @test_avgpool2d_unexpected_output_height (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x33 x32 x8 xf32 > {
1787
+ // expected-error@+1 {{'tosa.avg_pool2d' op calculated output height did not match expected: calculated=32, expected=33}}
1788
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1789
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x33 x32 x8 xf32 >
1790
+ return %0 : tensor <1 x33 x32 x8 xf32 >
1791
+ }
1792
+
1793
+ // -----
1794
+
1795
+ func.func @test_avgpool2d_unexpected_output_width (%arg0: tensor <1 x32 x32 x8 xf32 >, %arg1: tensor <1 xf32 >, %arg2: tensor <1 xf32 >) -> tensor <1 x?x33 x8 xf32 > {
1796
+ // expected-error@+1 {{'tosa.avg_pool2d' op calculated output width did not match expected: calculated=32, expected=33}}
1797
+ %0 = " tosa.avg_pool2d" (%arg0 , %arg1 , %arg2 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >, acc_type = f32 } :
1798
+ (tensor <1 x32 x32 x8 xf32 >, tensor <1 xf32 >, tensor <1 xf32 >) -> tensor <1 x?x33 x8 xf32 >
1799
+ return %0 : tensor <1 x?x33 x8 xf32 >
1800
+ }
1801
+
1802
+ // -----
1803
+
1804
+ func.func @test_maxpool2d_invalid_kernel (%arg0: tensor <1 x32 x32 x8 xf32 >) -> tensor <1 x2 x32 x8 xf32 > {
1805
+ // expected-error@+1 {{'tosa.max_pool2d' op expect all kernel values to be >= 1, got 0, 1}}
1806
+ %0 = " tosa.max_pool2d" (%arg0 ) {kernel = array<i64 : 0 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >} :
1807
+ (tensor <1 x32 x32 x8 xf32 >) -> tensor <1 x2 x32 x8 xf32 >
1808
+ return %0 : tensor <1 x2 x32 x8 xf32 >
1809
+ }
1810
+
1811
+ // -----
1812
+
1813
+ func.func @test_maxpool2d_unexpected_output_width (%arg0: tensor <1 x32 x32 x8 xf32 >) -> tensor <1 x32 x2 x8 xf32 > {
1814
+ // expected-error@+1 {{'tosa.max_pool2d' op calculated output width did not match expected: calculated=32, expected=2}}
1815
+ %0 = " tosa.max_pool2d" (%arg0 ) {kernel = array<i64 : 1 , 1 >, pad = array<i64 : 0 , 0 , 0 , 0 >, stride = array<i64 : 1 , 1 >} :
1816
+ (tensor <1 x32 x32 x8 xf32 >) -> tensor <1 x32 x2 x8 xf32 >
1817
+ return %0 : tensor <1 x32 x2 x8 xf32 >
1818
+ }
0 commit comments