Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,7 @@ include = ["xdsl_smt", "tests"]
ignore = [
"xdsl_smt/utils/z3_to_dialect.py",
"xdsl_smt/utils/integer_to_z3.py",
"xdsl_smt/utils/lower_utils.py",
"xdsl_smt/passes/calculate_smt.py",
"xdsl_smt/passes/transfer_lower.py",
"xdsl_smt/cli/xdsl_translate.py",
"xdsl_smt/cli/transfer_smt_verifier.py",
]
Expand Down
131 changes: 131 additions & 0 deletions tests/filecheck/lower-to-cpp/arith.mlir
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
// RUN: cpp-translate -i %s | filecheck %s

"builtin.module"() ({
"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.addi"(%x, %y) : (i32, i32) -> i32
"func.return"(%r) : (i32) -> ()
}) {"sym_name" = "add_test", "function_type" = (i32, i32) -> i32} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.subi"(%x, %y) : (i32, i32) -> i32
"func.return"(%r) : (i32) -> ()
}) {"sym_name" = "sub_test", "function_type" = (i32, i32) -> i32} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.andi"(%x, %y) : (i32, i32) -> i32
"func.return"(%r) : (i32) -> ()
}) {"sym_name" = "and_test", "function_type" = (i32, i32) -> i32} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.ori"(%x, %y) : (i32, i32) -> i32
"func.return"(%r) : (i32) -> ()
}) {"sym_name" = "or_test", "function_type" = (i32, i32) -> i32} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.xori"(%x, %y) : (i32, i32) -> i32
"func.return"(%r) : (i32) -> ()
}) {"sym_name" = "xor_test", "function_type" = (i32, i32) -> i32} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 0 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "eq_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 1 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "neq_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 2 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "lt_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 3 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "leq_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 4 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "gt_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
^0(%x : i32, %y : i32):
%r = "arith.cmpi"(%x, %y) {"predicate" = 5 : i64} : (i32, i32) -> i1
"func.return"(%r) : (i1) -> ()
}) {"sym_name" = "geq_test", "function_type" = (i32, i32) -> i1} : () -> ()

"func.func"() ({
%x = "arith.constant"() {value = 3 : i32} : () -> i32
"func.return"(%x) : (i32) -> ()
}) {"sym_name" = "const_test", "function_type" = () -> i32} : () -> ()

"func.func"() ({
^0(%x : i32):
"func.return"(%x) : (i32) -> ()
}) {"sym_name" = "empty_func_test", "function_type" = (i32) -> i32} : () -> ()
}) : () -> ()

// CHECK: int add_test(int x,int y){
// CHECK-NEXT: int r = x+y;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int sub_test(int x,int y){
// CHECK-NEXT: int r = x-y;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int and_test(int x,int y){
// CHECK-NEXT: int r = x&y;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int or_test(int x,int y){
// CHECK-NEXT: int r = x|y;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int xor_test(int x,int y){
// CHECK-NEXT: int r = x^y;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int eq_test(int x,int y){
// CHECK-NEXT: int r = (x==y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int neq_test(int x,int y){
// CHECK-NEXT: int r = (x!=y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int lt_test(int x,int y){
// CHECK-NEXT: int r = (x<y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int leq_test(int x,int y){
// CHECK-NEXT: int r = (x<=y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int gt_test(int x,int y){
// CHECK-NEXT: int r = (x>y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int geq_test(int x,int y){
// CHECK-NEXT: int r = (x>=y);
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: int const_test(){
// CHECK-NEXT: int x = 3;
// CHECK-NEXT: return x;
// CHECK-NEXT: }
// CHECK-NEXT: int empty_func_test(int x){
// CHECK-NEXT: return x;
// CHECK-NEXT: }
62 changes: 62 additions & 0 deletions tests/filecheck/lower-to-cpp/special-ops.mlir
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// RUN: cpp-translate -i %s | filecheck %s

"builtin.module"() ({
"func.func"() ({
^0(%c : i1, %x : !transfer.integer, %y : !transfer.integer):
%r = "transfer.select"(%c, %x, %y) : (i1, !transfer.integer, !transfer.integer) -> !transfer.integer
"func.return"(%r) : (!transfer.integer) -> ()
}) {"sym_name" = "select_test", "function_type" = (i1, !transfer.integer, !transfer.integer) -> !transfer.integer} : () -> ()

"func.func"() ({
^0(%lhs : !transfer.abs_value<[!transfer.integer, !transfer.integer]>, %rhs : !transfer.abs_value<[!transfer.integer, !transfer.integer]>):
%lhs0 = "transfer.get"(%lhs) {index = 0} : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer
%lhs1 = "transfer.get"(%lhs) {index = 1} : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer
%rhs0 = "transfer.get"(%rhs) {index = 0} : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer
%rhs1 = "transfer.get"(%rhs) {index = 1} : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer
%res0 = "transfer.or"(%lhs0, %rhs0) : (!transfer.integer, !transfer.integer) -> !transfer.integer
%res1 = "transfer.and"(%lhs1, %rhs1) : (!transfer.integer, !transfer.integer) -> !transfer.integer
%r = "transfer.make"(%res0, %res1) : (!transfer.integer, !transfer.integer) -> !transfer.abs_value<[!transfer.integer, !transfer.integer]>
"func.return"(%r) : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> ()
}) {"sym_name" = "kb_and_test", "function_type" = (!transfer.abs_value<[!transfer.integer, !transfer.integer]>, !transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.abs_value<[!transfer.integer, !transfer.integer]>} : () -> ()

"func.func"() ({
^0(%x : !transfer.abs_value<[!transfer.integer, !transfer.integer]>):
%r = "transfer.get"(%x) {index = 0} : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer
"func.return"(%r) : (!transfer.integer) -> ()
}) {"sym_name" = "get_test", "function_type" = (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> !transfer.integer} : () -> ()

"func.func"() ({
^0(%x : !transfer.integer, %y : !transfer.integer):
%r = "transfer.make"(%x, %y) : (!transfer.integer, !transfer.integer) -> !transfer.abs_value<[!transfer.integer, !transfer.integer]>
"func.return"(%r) : (!transfer.abs_value<[!transfer.integer, !transfer.integer]>) -> ()
}) {"sym_name" = "make_2_test", "function_type" = (!transfer.integer, !transfer.integer) -> !transfer.abs_value<[!transfer.integer, !transfer.integer]>} : () -> ()

// "func.func"() ({
// ^0(%x : !transfer.integer, %y : !transfer.integer, %z : !transfer.integer):
// %r = "transfer.make"(%x, %y, %z) : (!transfer.integer, !transfer.integer, !transfer.integer) -> !transfer.abs_value<[!transfer.integer, !transfer.integer, !transfer.integer]>
// "func.return"(%r) : (!transfer.abs_value<[!transfer.integer, !transfer.integer, !transfer.integer]>) -> ()
// }) {"sym_name" = "make_3_test", "function_type" = (!transfer.integer, !transfer.integer, !transfer.integer) -> !transfer.abs_value<[!transfer.integer, !transfer.integer, !transfer.integer]>} : () -> ()
}) : () -> ()

// CHECK: const APInt select_test(int c,const APInt &x,const APInt &y){
// CHECK-NEXT: const APInt r = c ? x : y ;
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: std::vector<const APInt> kb_and_test(std::vector<const APInt> &lhs,std::vector<const APInt> &rhs){
// CHECK-NEXT: const APInt lhs0 = lhs[0];
// CHECK-NEXT: const APInt lhs1 = lhs[1];
// CHECK-NEXT: const APInt rhs0 = rhs[0];
// CHECK-NEXT: const APInt rhs1 = rhs[1];
// CHECK-NEXT: const APInt res0 = lhs0|rhs0;
// CHECK-NEXT: const APInt res1 = lhs1&rhs1;
// CHECK-NEXT: std::vector<const APInt> r = std::vector<const APInt>{res0,res1};
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: const APInt get_test(std::vector<const APInt> &x){
// CHECK-NEXT: const APInt r = x[0];
// CHECK-NEXT: return r;
// CHECK-NEXT: }
// CHECK-NEXT: std::vector<const APInt> make_2_test(const APInt &x,const APInt &y){
// CHECK-NEXT: std::vector<const APInt> r = std::vector<const APInt>{x,y};
// CHECK-NEXT: return r;
// CHECK-NEXT: }
Loading