@@ -187,6 +187,60 @@ func.func private @test_xor(%arg0 : tensor<10x10xi1>, %arg1 : tensor<10x10xi1>)
187187
188188// -----
189189
190+ func.func private @test_bitwise_and (%arg0 : tensor <10 x10 xi8 >, %arg1 : tensor <10 x10 xi8 >) -> tensor <*xi8 > {
191+ %0 = " onnx.BitwiseAnd" (%arg0 , %arg1 ) : (tensor <10 x10 xi8 >, tensor <10 x10 xi8 >) -> tensor <*xi8 >
192+ " func.return" (%0 ) : (tensor <*xi8 >) -> ()
193+
194+ // CHECK-LABEL: test_bitwise_and
195+ // CHECK: [[RES:%.+]] = memref.alloc() {{.*}}: memref<10x10xi8>
196+ // CHECK: [[DEF_LOOPS:%.+]]:2 = krnl.define_loops 2
197+ // CHECK: krnl.iterate([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) with ([[DEF_LOOPS]]#0 -> %arg2 = 0 to 10, [[DEF_LOOPS]]#1 -> %arg3 = 0 to 10){
198+ // CHECK: [[IV:%.+]]:2 = krnl.get_induction_var_value([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) : (!krnl.loop, !krnl.loop) -> (index, index)
199+ // CHECK: [[LOAD1:%.+]] = krnl.load %arg0[[[IV]]#0, [[IV]]#1] : memref<10x10xi8>
200+ // CHECK: [[LOAD2:%.+]] = krnl.load %arg1[[[IV]]#0, [[IV]]#1] : memref<10x10xi8>
201+ // CHECK: [[AND:%.+]] = arith.andi [[LOAD1]], [[LOAD2]] : i8
202+ // CHECK: krnl.store [[AND]], [[RES]][[[IV]]#0, [[IV]]#1] : memref<10x10xi8>
203+ // CHECK: return [[RES]] : memref<10x10xi8>
204+ }
205+
206+ // -----
207+
208+ func.func private @test_bitwise_or (%arg0 : tensor <10 x10 xi16 >, %arg1 : tensor <10 x10 xi16 >) -> tensor <*xi16 > {
209+ %0 = " onnx.BitwiseOr" (%arg0 , %arg1 ) : (tensor <10 x10 xi16 >, tensor <10 x10 xi16 >) -> tensor <*xi16 >
210+ " func.return" (%0 ) : (tensor <*xi16 >) -> ()
211+
212+ // CHECK-LABEL: test_bitwise_or
213+ // CHECK: [[RES:%.+]] = memref.alloc() {{.*}}: memref<10x10xi16>
214+ // CHECK: [[DEF_LOOPS:%.+]]:2 = krnl.define_loops 2
215+ // CHECK: krnl.iterate([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) with ([[DEF_LOOPS]]#0 -> %arg2 = 0 to 10, [[DEF_LOOPS]]#1 -> %arg3 = 0 to 10){
216+ // CHECK: [[IV:%.+]]:2 = krnl.get_induction_var_value([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) : (!krnl.loop, !krnl.loop) -> (index, index)
217+ // CHECK: [[LOAD1:%.+]] = krnl.load %arg0[[[IV]]#0, [[IV]]#1] : memref<10x10xi16>
218+ // CHECK: [[LOAD2:%.+]] = krnl.load %arg1[[[IV]]#0, [[IV]]#1] : memref<10x10xi16>
219+ // CHECK: [[OR:%.+]] = arith.ori [[LOAD1]], [[LOAD2]] : i16
220+ // CHECK: krnl.store [[OR]], [[RES]][[[IV]]#0, [[IV]]#1] : memref<10x10xi16>
221+ // CHECK: return [[RES]] : memref<10x10xi16>
222+ }
223+
224+ // -----
225+
226+ func.func private @test_bitwise_xor (%arg0 : tensor <10 x10 xi32 >, %arg1 : tensor <10 x10 xi32 >) -> tensor <*xi32 > {
227+ %0 = " onnx.BitwiseXor" (%arg0 , %arg1 ) : (tensor <10 x10 xi32 >, tensor <10 x10 xi32 >) -> tensor <*xi32 >
228+ " func.return" (%0 ) : (tensor <*xi32 >) -> ()
229+
230+ // CHECK-LABEL: test_bitwise_xor
231+ // CHECK: [[RES:%.+]] = memref.alloc() {{.*}}: memref<10x10xi32>
232+ // CHECK: [[DEF_LOOPS:%.+]]:2 = krnl.define_loops 2
233+ // CHECK: krnl.iterate([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) with ([[DEF_LOOPS]]#0 -> %arg2 = 0 to 10, [[DEF_LOOPS]]#1 -> %arg3 = 0 to 10){
234+ // CHECK: [[IV:%.+]]:2 = krnl.get_induction_var_value([[DEF_LOOPS]]#0, [[DEF_LOOPS]]#1) : (!krnl.loop, !krnl.loop) -> (index, index)
235+ // CHECK: [[LOAD1:%.+]] = krnl.load %arg0[[[IV]]#0, [[IV]]#1] : memref<10x10xi32>
236+ // CHECK: [[LOAD2:%.+]] = krnl.load %arg1[[[IV]]#0, [[IV]]#1] : memref<10x10xi32>
237+ // CHECK: [[XOR:%.+]] = arith.xori [[LOAD1]], [[LOAD2]] : i32
238+ // CHECK: krnl.store [[XOR]], [[RES]][[[IV]]#0, [[IV]]#1] : memref<10x10xi32>
239+ // CHECK: return [[RES]] : memref<10x10xi32>
240+ }
241+
242+ // -----
243+
190244func.func private @test_exp (%arg0 : tensor <?x10 xf32 >) -> tensor <*xf32 > {
191245 %0 = " onnx.Exp" (%arg0 ) : (tensor <?x10 xf32 >) -> tensor <*xf32 >
192246 " func.return" (%0 ) : (tensor <*xf32 >) -> ()
0 commit comments