22// TODO (#1929): Improve test with better CHECKs
33// TODO (#1641): enable i32-based tests once CKKS pipeline allows integer types
44
5- // // CHECK: func.func @secret_loop_index_step
6- // func.func @secret_loop_index_step(%arg0: i32 {secret.secret}, %arg1: i32 {secret.secret}) -> i32 {
7- // %c0 = arith.constant 0 : index
8- // %c1 = arith.constant 1 : index
9- // %c1_i32 = arith.constant 1 : i32
10- // %0 = arith.index_cast %arg0 : i32 to index
11- // // CHECK-NOT: scf.for
12- // // CHECK-NOT: arith.cmpi
13- // // CHECK-NOT: math_ext.sign
14- // // CHECK: polynomial.eval
15- // %1 = scf.for %arg2 = %c0 to %0 step %c1 iter_args(%arg3 = %c1_i32) -> (i32) {
16- // %2 = arith.muli %arg3, %arg0 : i32
17- // scf.yield %2 : i32
18- // } {upper = 6}
19- // return %1 : i32
20- // }
21-
22- // // When scf.for uses a signless integer step, --convert-secret-for-to-static-for would forget to issue arith.index_cast
23- // // CHECK: func.func @secret_loop_signless_integer_step
24- // func.func @secret_loop_signless_integer_step(%arg0: i32 {secret.secret}, %arg1: i32 {secret.secret}) -> i32 {
25- // %c0_i32 = arith.constant 0 : i32
26- // %c1_i32 = arith.constant 1 : i32
27- // // CHECK-NOT: scf.for
28- // // CHECK-NOT: arith.cmpi
29- // // CHECK-NOT: math_ext.sign
30- // // CHECK: polynomial.eval
31- // %1 = scf.for %arg2 = %c0_i32 to %arg0 step %c1_i32 iter_args(%arg3 = %c1_i32) -> (i32) : i32 {
32- // %2 = arith.muli %arg3, %arg0 : i32
33- // scf.yield %2 : i32
34- // } {upper = 6}
35- // return %1 : i32
36- // }
37-
385// CHECK: func.func @float_secret_loop_index_step
396func.func @float_secret_loop_index_step (%arg0: f32 {secret.secret }, %arg1: f32 {secret.secret }) -> f32 {
407 %c0 = arith.constant 0 : index
@@ -45,7 +12,7 @@ func.func @float_secret_loop_index_step(%arg0: f32 {secret.secret}, %arg1: f32 {
4512 // CHECK-NOT: scf.for
4613 // CHECK-NOT: arith.cmpi
4714 // CHECK-NOT: math_ext.sign
48- // CHECK: polynomial.eval
15+ // CHECK-NOT : polynomial.eval
4916 %2 = scf.for %arg2 = %c0 to %1 step %c1 iter_args (%arg3 = %c1_f32 ) -> (f32 ) {
5017 %2 = arith.mulf %arg3 , %arg0 : f32
5118 scf.yield %2 : f32
@@ -63,10 +30,33 @@ func.func @float_secret_loop_signless_integer_step(%arg0: f32 {secret.secret}, %
6330 // CHECK-NOT: scf.for
6431 // CHECK-NOT: arith.cmpi
6532 // CHECK-NOT: math_ext.sign
66- // CHECK: polynomial.eval
33+ // CHECK-NOT : polynomial.eval
6734 %1 = scf.for %arg2 = %c0_i32 to %0 step %c1_i32 iter_args (%arg3 = %c1_f32 ) -> (f32 ) : i32 {
6835 %2 = arith.mulf %arg3 , %arg0 : f32
6936 scf.yield %2 : f32
7037 } {upper = 6 }
7138 return %1 : f32
7239}
40+
41+ // func.func @secret_loop_index_step(%arg0: i32 {secret.secret}, %arg1: i32 {secret.secret}) -> i32 {
42+ // %c0 = arith.constant 0 : index
43+ // %c1 = arith.constant 1 : index
44+ // %c1_i32 = arith.constant 1 : i32
45+ // %0 = arith.index_cast %arg0 : i32 to index
46+ // %1 = scf.for %arg2 = %c0 to %0 step %c1 iter_args(%arg3 = %c1_i32) -> (i32) {
47+ // %2 = arith.muli %arg3, %arg0 : i32
48+ // scf.yield %2 : i32
49+ // } {upper = 6}
50+ // return %1 : i32
51+ // }
52+
53+ // // When scf.for uses a signless integer step, --convert-secret-for-to-static-for would forget to issue arith.index_cast
54+ // func.func @secret_loop_signless_integer_step(%arg0: i32 {secret.secret}, %arg1: i32 {secret.secret}) -> i32 {
55+ // %c0_i32 = arith.constant 0 : i32
56+ // %c1_i32 = arith.constant 1 : i32
57+ // %1 = scf.for %arg2 = %c0_i32 to %arg0 step %c1_i32 iter_args(%arg3 = %c1_i32) -> (i32) : i32 {
58+ // %2 = arith.muli %arg3, %arg0 : i32
59+ // scf.yield %2 : i32
60+ // } {upper = 6}
61+ // return %1 : i32
62+ // }
0 commit comments