77// CHECK-SAME: () -> [[T:.*]] {
88func.func @test_lower_constant () -> !mod_arith.int <3 : i5 > {
99 // CHECK-NOT: mod_arith.constant
10- // CHECK: %[[CVAL:.*]] = arith.constant 5 : [[T]]
11- // CHECK: %[[CMOD:.*]] = arith.constant 3 : [[T]]
12- // CHECK: %[[REMU:.*]] = arith.remui %[[CVAL]], %[[CMOD]] : [[T]]
13- // CHECK: return %[[REMU]] : [[T]]
10+ // CHECK: %[[CVAL:.*]] = arith.constant 2 : [[T]]
11+ // CHECK: return %[[CVAL]] : [[T]]
1412 %res = mod_arith.constant 5 : !mod_arith.int <3 : i5 >
1513 return %res: !mod_arith.int <3 : i5 >
1614}
@@ -116,7 +114,9 @@ func.func @test_lower_add(%lhs : !Zp, %rhs : !Zp) -> !Zp {
116114 // CHECK-NOT: mod_arith.add
117115 // CHECK: %[[CMOD:.*]] = arith.constant 65537 : [[T]]
118116 // CHECK: %[[ADD:.*]] = arith.addi %[[LHS]], %[[RHS]] : [[T]]
119- // CHECK: %[[REM:.*]] = arith.remui %[[ADD]], %[[CMOD]] : [[T]]
117+ // CHECK: %[[IFGE:.*]] = arith.cmpi uge, %[[ADD]], %[[CMOD]] : [[T]]
118+ // CHECK: %[[SUB:.*]] = arith.subi %[[ADD]], %[[CMOD]] : [[T]]
119+ // CHECK: %[[REM:.*]] = arith.select %[[IFGE]], %[[SUB]], %[[ADD]] : [[T]]
120120 // CHECK: return %[[REM]] : [[T]]
121121 %res = mod_arith.add %lhs , %rhs : !Zp
122122 return %res : !Zp
@@ -128,7 +128,9 @@ func.func @test_lower_add_vec(%lhs : !Zpv, %rhs : !Zpv) -> !Zpv {
128128 // CHECK-NOT: mod_arith.add
129129 // CHECK: %[[CMOD:.*]] = arith.constant dense<65537> : [[T]]
130130 // CHECK: %[[ADD:.*]] = arith.addi %[[LHS]], %[[RHS]] : [[T]]
131- // CHECK: %[[REM:.*]] = arith.remui %[[ADD]], %[[CMOD]] : [[T]]
131+ // CHECK: %[[IFGE:.*]] = arith.cmpi uge, %[[ADD]], %[[CMOD]] : [[T]]
132+ // CHECK: %[[SUB:.*]] = arith.subi %[[ADD]], %[[CMOD]] : [[T]]
133+ // CHECK: %[[REM:.*]] = arith.select %[[IFGE]], %[[SUB]], %[[ADD]] : tensor<4xi1>, [[T]]
132134 // CHECK: return %[[REM]] : [[T]]
133135 %res = mod_arith.add %lhs , %rhs : !Zpv
134136 return %res : !Zpv
@@ -141,8 +143,9 @@ func.func @test_lower_sub(%lhs : !Zp, %rhs : !Zp) -> !Zp {
141143 // CHECK: %[[CMOD:.*]] = arith.constant 65537 : [[T]]
142144 // CHECK: %[[SUB:.*]] = arith.subi %[[LHS]], %[[RHS]] : [[T]]
143145 // CHECK: %[[ADD:.*]] = arith.addi %[[SUB]], %[[CMOD]] : [[T]]
144- // CHECK: %[[REM:.*]] = arith.remui %[[ADD]], %[[CMOD]] : [[T]]
145- // CHECK: return %[[REM]] : [[T]]
146+ // CHECK: %[[IFGE:.*]] = arith.cmpi uge, %[[LHS]], %[[RHS]] : [[T]]
147+ // CHECK: %[[SELECT:.*]] = arith.select %[[IFGE]], %[[SUB]], %[[ADD]] : [[T]]
148+ // CHECK: return %[[SELECT]] : [[T]]
146149 %res = mod_arith.sub %lhs , %rhs : !Zp
147150 return %res : !Zp
148151}
@@ -154,8 +157,9 @@ func.func @test_lower_sub_vec(%lhs : !Zpv, %rhs : !Zpv) -> !Zpv {
154157 // CHECK: %[[CMOD:.*]] = arith.constant dense<65537> : [[T]]
155158 // CHECK: %[[SUB:.*]] = arith.subi %[[LHS]], %[[RHS]] : [[T]]
156159 // CHECK: %[[ADD:.*]] = arith.addi %[[SUB]], %[[CMOD]] : [[T]]
157- // CHECK: %[[REM:.*]] = arith.remui %[[ADD]], %[[CMOD]] : [[T]]
158- // CHECK: return %[[REM]] : [[T]]
160+ // CHECK: %[[IFGE:.*]] = arith.cmpi uge, %[[LHS]], %[[RHS]] : [[T]]
161+ // CHECK: %[[SELECT:.*]] = arith.select %[[IFGE]], %[[SUB]], %[[ADD]] : tensor<4xi1>, [[T]]
162+ // CHECK: return %[[SELECT]] : [[T]]
159163 %res = mod_arith.sub %lhs , %rhs : !Zpv
160164 return %res : !Zpv
161165}
@@ -195,10 +199,8 @@ func.func @test_lower_mul_vec(%lhs : !Zpv, %rhs : !Zpv) -> !Zpv {
195199func.func @test_lower_constant_tensor () -> !Zpv {
196200 // CHECK-NOT: mod_arith.constant
197201 // CHECK: %[[C0:.*]] = arith.constant 5 : [[INT:.*]]
198- // CHECK: %[[C1:.*]] = arith.constant 65537 : [[INT]]
199- // CHECK: %[[C2:.*]] = arith.remui %[[C0]], %[[C1]] : [[INT]]
200202 %c0 = mod_arith.constant 5 : !Zp
201- // CHECK: %[[RES:.*]] = tensor.from_elements %[[C2 ]], %[[C2 ]], %[[C2 ]], %[[C2 ]] : [[T]]
203+ // CHECK: %[[RES:.*]] = tensor.from_elements %[[C0 ]], %[[C0 ]], %[[C0 ]], %[[C0 ]] : [[T]]
202204 %res = tensor.from_elements %c0 , %c0 , %c0 , %c0 : !Zpv
203205 // CHECK: return %[[RES]] : [[T]]
204206 return %res : !Zpv
0 commit comments