@@ -93,7 +93,7 @@ func.func @test_add_0d(%arg0: tensor<f32>, %arg1: tensor<f32>) -> tensor<f32> {
93
93
// CHECK: linalg.yield [[ADDF]] : f32
94
94
// CHECK: } -> tensor<f32>
95
95
%0 = tosa.add %arg0 , %arg1 : (tensor <f32 >, tensor <f32 >) -> tensor <f32 >
96
-
96
+
97
97
// CHECK: return [[RESULT]] : tensor<f32>
98
98
return %0 : tensor <f32 >
99
99
}
@@ -223,7 +223,7 @@ func.func @test_add_1d_broadcast_static_to_static(%arg0: tensor<1xf32>, %arg1: t
223
223
// CHECK: linalg.yield %[[VAL_4]] : f32
224
224
// CHECK: } -> tensor<3xf32>
225
225
%0 = tosa.add %arg0 , %arg1 : (tensor <1 xf32 >, tensor <3 xf32 >) -> tensor <3 xf32 >
226
-
226
+
227
227
// CHECK: return %[[RESULT]] : tensor<3xf32>
228
228
return %0 : tensor <3 xf32 >
229
229
}
@@ -352,7 +352,7 @@ func.func @test_add_2d_different_ranks(%arg0: tensor<3x4xf32>, %arg1: tensor<2x3
352
352
// CHECK: linalg.yield %[[VAL_4]] : f32
353
353
// CHECK: } -> tensor<2x3x4xf32>
354
354
%0 = tosa.add %arg0 , %arg1 : (tensor <3 x4 xf32 >, tensor <2 x3 x4 xf32 >) -> tensor <2 x3 x4 xf32 >
355
-
355
+
356
356
// CHECK: return %[[RESULT]] : tensor<2x3x4xf32>
357
357
return %0 : tensor <2 x3 x4 xf32 >
358
358
}
@@ -1057,7 +1057,7 @@ func.func @rescale_i8(%arg0 : tensor<2xi8>) -> () {
1057
1057
// CHECK-DAG: [[BOUNDED:%.+]] = arith.select [[MAXLT]], [[CMAX]], [[LOWER]]
1058
1058
// CHECK-DAG: [[TRUNC:%.+]] = arith.trunci [[BOUNDED]]
1059
1059
// CHECK-DAG: linalg.yield [[TRUNC]]
1060
- %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1060
+ %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1061
1061
1062
1062
// CHECK: [[C0:%.+]] = arith.constant 19689
1063
1063
// CHECK: [[C1:%.+]] = arith.constant 15
@@ -1079,7 +1079,7 @@ func.func @rescale_i8(%arg0 : tensor<2xi8>) -> () {
1079
1079
// CHECK-DAG: [[TRUNC:%.+]] = arith.trunci [[BOUNDED]]
1080
1080
// CHECK-DAG: [[CAST:%.+]] = builtin.unrealized_conversion_cast [[TRUNC]] : i8 to ui8
1081
1081
// CHECK: linalg.yield [[CAST]]
1082
- %1 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xui8 >
1082
+ %1 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xui8 >
1083
1083
1084
1084
// CHECK: return
1085
1085
return
@@ -1096,13 +1096,13 @@ func.func @rescale_i8_dyn_batch(%arg0 : tensor<?x2xi8>) -> () {
1096
1096
// CHECK: %[[BATCH:.+]] = tensor.dim %[[ARG0]], %[[C0]]
1097
1097
// CHECK: %[[INIT:.+]] = tensor.empty(%[[BATCH]]) : tensor<?x2xi8>
1098
1098
// CHECK: [[GENERIC:%.+]] = linalg.generic {indexing_maps = [#[[$MAP0]], #[[$MAP0]]], iterator_types = ["parallel", "parallel"]} ins(%[[ARG0]] : tensor<?x2xi8>) outs(%[[INIT]] : tensor<?x2xi8>)
1099
- %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <?x2 xi8 >) -> tensor <?x2 xi8 >
1099
+ %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <?x2 xi8 >) -> tensor <?x2 xi8 >
1100
1100
1101
1101
// CHECK: %[[C0:.+]] = arith.constant 0
1102
1102
// CHECK: %[[BATCH:.+]] = tensor.dim %[[ARG0]], %[[C0]]
1103
1103
// CHECK: %[[INIT:.+]] = tensor.empty(%[[BATCH]]) : tensor<?x2xui8>
1104
1104
// CHECK: [[GENERIC:%.+]] = linalg.generic {indexing_maps = [#[[$MAP0]], #[[$MAP0]]], iterator_types = ["parallel", "parallel"]} ins(%[[ARG0]] : tensor<?x2xi8>) outs(%[[INIT]] : tensor<?x2xui8>)
1105
- %1 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <?x2 xi8 >) -> tensor <?x2 xui8 >
1105
+ %1 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <?x2 xi8 >) -> tensor <?x2 xui8 >
1106
1106
1107
1107
return
1108
1108
}
@@ -1120,7 +1120,7 @@ func.func @rescale_dyn(%arg0 : tensor<1x?x?x32xi32>) -> () {
1120
1120
// CHECK: %[[DIM2:.+]] = tensor.dim %[[ARG0]], %[[C2]]
1121
1121
// CHECK: %[[INIT:.+]] = tensor.empty(%[[DIM1]], %[[DIM2]])
1122
1122
// CHECK: [[GENERIC:%.+]] = linalg.generic {indexing_maps = [#[[$MAP1]], #[[$MAP1]]], iterator_types = ["parallel", "parallel", "parallel", "parallel"]} ins(%[[ARG0]] : tensor<1x?x?x32xi32>) outs(%[[INIT]] : tensor<1x?x?x32xi8>)
1123
- %0 = tosa.rescale %arg0 {double_round = true , input_zp = 0 : i32 , multiplier = array<i32 : 1376784203 >, output_zp = 0 : i32 , per_channel = false , scale32 = true , shift = array<i32 : 38 >} : (tensor <1 x?x?x32 xi32 >) -> tensor <1 x?x?x32 xi8 >
1123
+ %0 = tosa.rescale %arg0 {double_round = true , input_zp = 0 : i32 , multiplier = array<i32 : 1376784203 >, output_zp = 0 : i32 , per_channel = false , scale32 = true , shift = array<i8 : 38 >} : (tensor <1 x?x?x32 xi32 >) -> tensor <1 x?x?x32 xi8 >
1124
1124
return
1125
1125
}
1126
1126
@@ -1151,7 +1151,7 @@ func.func @rescale_ui8(%arg0 : tensor<2xui8>) -> () {
1151
1151
// CHECK-DAG: [[BOUNDED:%.+]] = arith.select [[MAXLT]], [[CMAX]], [[LOWER]]
1152
1152
// CHECK-DAG: [[TRUNC:%.+]] = arith.trunci [[BOUNDED]]
1153
1153
// CHECK: linalg.yield [[TRUNC]]
1154
- %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xui8 >) -> tensor <2 xi8 >
1154
+ %0 = tosa.rescale %arg0 {input_zp = 17 : i32 , output_zp = 22 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = false , double_round = false , per_channel = false } : (tensor <2 xui8 >) -> tensor <2 xi8 >
1155
1155
1156
1156
return
1157
1157
}
@@ -1183,7 +1183,7 @@ func.func @rescale_per_channel(%arg0 : tensor<3xi8>) -> (tensor<3xi8>) {
1183
1183
// CHECK-DAG: [[BOUNDED:%.+]] = arith.select [[MAXLT]], [[CMAX]], [[LOWER]]
1184
1184
// CHECK-DAG: [[TRUNC:%.+]] = arith.trunci [[BOUNDED]]
1185
1185
// CHECK-DAG: linalg.yield [[TRUNC]]
1186
- %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 42 , 43 , 44 >, shift = array<i32 : 14 , 15 , 64 >, scale32 = false , double_round = false , per_channel = false } : (tensor <3 xi8 >) -> tensor <3 xi8 >
1186
+ %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 42 , 43 , 44 >, shift = array<i8 : 14 , 15 , 64 >, scale32 = false , double_round = false , per_channel = false } : (tensor <3 xi8 >) -> tensor <3 xi8 >
1187
1187
1188
1188
// CHECK: return [[GENERIC]]
1189
1189
return %0 : tensor <3 xi8 >
@@ -1194,18 +1194,18 @@ func.func @rescale_per_channel(%arg0 : tensor<3xi8>) -> (tensor<3xi8>) {
1194
1194
// CHECK-LABEL: @rescaleDoubleRound
1195
1195
func.func @rescaleDoubleRound (%arg0 : tensor <2 xi8 >) -> (tensor <2 xi8 >) {
1196
1196
// CHECK: linalg.generic
1197
- // CHECK: tosa.apply_scale
1197
+ // CHECK: tosa.apply_scale
1198
1198
// CHECK-SAME: {double_round = true}
1199
- %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 33 >, scale32 = true , double_round = true , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1199
+ %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 33 >, scale32 = true , double_round = true , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1200
1200
return %0 : tensor <2 xi8 >
1201
1201
}
1202
1202
1203
1203
// CHECK-LABEL: @rescaleUnnecessaryDoubleRound
1204
1204
func.func @rescaleUnnecessaryDoubleRound (%arg0 : tensor <2 xi8 >) -> (tensor <2 xi8 >) {
1205
1205
// CHECK: linalg.generic
1206
- // CHECK: tosa.apply_scale
1206
+ // CHECK: tosa.apply_scale
1207
1207
// CHECK-SAME: {double_round = false}
1208
- %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 19689 >, shift = array<i32 : 15 >, scale32 = true , double_round = true , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1208
+ %0 = tosa.rescale %arg0 {input_zp = 243 : i32 , output_zp = 252 : i32 , multiplier = array<i32 : 19689 >, shift = array<i8 : 15 >, scale32 = true , double_round = true , per_channel = false } : (tensor <2 xi8 >) -> tensor <2 xi8 >
1209
1209
return %0 : tensor <2 xi8 >
1210
1210
}
1211
1211
0 commit comments