Skip to content

Commit

Permalink
Add bitwise operator support in LLVM
Browse files Browse the repository at this point in the history
  • Loading branch information
namannimmo10 authored and certik committed Jun 21, 2022
1 parent b164bcd commit dd526d9
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 35 deletions.
59 changes: 31 additions & 28 deletions integration_tests/expr_05.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,19 @@ def main0():
i = 1
i += 1
assert i == 2
a = 2
b = 5
assert test_mod(a, b) == 2
assert test_mod(23, 3) == 2
a = 123282374
b = 32771
assert test_mod(a, b) == 30643
a = -5345
b = -534
assert a % b == -5
# a = -123282374
# b = 32771
# assert test_mod(a, b) == 2128

assert 10 | 4 == 14
assert -105346 | -32771 == -32769
Expand All @@ -26,33 +39,23 @@ def main0():
assert 10 >> 1 == 5
assert 5 << 1 == 10

#: TODO: uncomment once modulo support is added in LLVM
# a = 2
# b = 5
# assert test_mod(a, b) == 2
# assert test_mod(23, 3) == 2
# a = 123282374
# b = 32771
# assert test_mod(a, b) == 30643
# a = -123282374
# b = 32771
# assert test_mod(a, b) == 2128

#: TODO: uncomment these tests once
#: bitwise operator supported is added in LLVM
# i1: i32 = 10
# i2: i32 = 4
# assert i1 << i2 == 160
# assert i1 >> i2 == 0
# assert i1 & i2 == 0
# assert i1 | i2 == 14
# assert i1 ^ i2 == 14
# assert -i1 ^ -i2 == 10
# i3: i32 = 432534534
# i4: i32 = -4325
# assert i3 | i4 == -225
# assert i4 >> 3 == -541
# assert -i3 & i4 == -432534758
# assert -i3 ^ i4 == 432530657
i1: i32
i1 = 10
i2: i32
i2 = 4
assert i1 & i2 == 0
assert i1 | i2 == 14
assert i1 ^ i2 == 14
assert -i1 ^ -i2 == 10
i3: i32
i3 = 432534534
i4: i32
i4 = -4325
assert i3 | i4 == -225
assert -i3 & i4 == -432534758
assert -i3 ^ i4 == 432530657
assert i1 << i2 == 160
assert i1 >> i2 == 0
assert i4 >> 3 == -541

main0()
28 changes: 26 additions & 2 deletions src/libasr/codegen/asr_to_llvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3258,6 +3258,30 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
tmp = builder->CreateFPToSI(tmp, type);
break;
};
case ASR::binopType::Mod: {
tmp = builder->CreateSRem(left_val, right_val);
break;
}
case ASR::binopType::BitOr: {
tmp = builder->CreateOr(left_val, right_val);
break;
}
case ASR::binopType::BitAnd: {
tmp = builder->CreateAnd(left_val, right_val);
break;
}
case ASR::binopType::BitXor: {
tmp = builder->CreateXor(left_val, right_val);
break;
}
case ASR::binopType::BitLShift: {
tmp = builder->CreateShl(left_val, right_val);
break;
}
case ASR::binopType::BitRShift: {
tmp = builder->CreateAShr(left_val, right_val);
break;
}
default: {
throw CodeGenError("Binary operator '" + ASRUtils::binop_to_str(x.m_op) + "' not supported yet",
x.base.base.loc);
Expand Down Expand Up @@ -3310,7 +3334,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
break;
};
default: {
throw CodeGenError("Binary operator '" + ASRUtils::binop_to_str(x.m_op) + "' not supported yet",
throw CodeGenError("Binary operator '" + ASRUtils::binop_to_str(x.m_op) + "' not supported",
x.base.base.loc);
}
}
Expand Down Expand Up @@ -3379,7 +3403,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
break;
};
default: {
throw CodeGenError("Binary operator '" + ASRUtils::binop_to_str(x.m_op) + "' not supported yet",
throw CodeGenError("Binary operator '" + ASRUtils::binop_to_str(x.m_op) + "' not supported",
x.base.base.loc);
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/lpython/semantics/python_ast_to_asr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1280,7 +1280,7 @@ class CommonVisitor : public AST::BaseVisitor<Derived> {
} else if (ASRUtils::is_real(*dest_type)) {

if (op == ASR::binopType::BitAnd || op == ASR::binopType::BitOr || op == ASR::binopType::BitXor ||
op == ASR::binopType::BitLShift || op == ASR::binopType::BitRShift) {
op == ASR::binopType::BitLShift || op == ASR::binopType::BitRShift || op == ASR::binopType::Mod) {
throw SemanticError("Unsupported binary operation on floats: '" + ASRUtils::binop_to_str(op) + "'", loc);
}

Expand All @@ -1296,7 +1296,6 @@ class CommonVisitor : public AST::BaseVisitor<Derived> {
case (ASR::binopType::Mul): { result = left_value * right_value; break; }
case (ASR::binopType::Div): { result = left_value / right_value; break; }
case (ASR::binopType::Pow): { result = std::pow(left_value, right_value); break; }
case (ASR::binopType::Mod): { result = std::fmod(left_value, right_value); break; }
default: { LFORTRAN_ASSERT(false); }
}
value = ASR::down_cast<ASR::expr_t>(ASR::make_RealConstant_t(
Expand Down
4 changes: 2 additions & 2 deletions tests/reference/asr-expr_05-3a37324.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"basename": "asr-expr_05-3a37324",
"cmd": "lpython --show-asr --no-color {infile} -o {outfile}",
"infile": "tests/../integration_tests/expr_05.py",
"infile_hash": "cba63e73ff49ca52b1b6e36312668313fea5791780985ac02bcdc1b6",
"infile_hash": "8be13a1b6c09027486e5fbc4dc299238f9a99ea95685a2cb636752d4",
"outfile": null,
"outfile_hash": null,
"stdout": "asr-expr_05-3a37324.stdout",
"stdout_hash": "6545f63f247a2ad710e4eecb5438044c1d17a5ccbe8ef2e60fafa98d",
"stdout_hash": "37648f0ebdf9a053171005671c1c757d04f66966873286c42d16e8e0",
"stderr": null,
"stderr_hash": null,
"returncode": 0
Expand Down
2 changes: 1 addition & 1 deletion tests/reference/asr-expr_05-3a37324.stdout
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(TranslationUnit (SymbolTable 1 {_lpython_main_program: (Subroutine (SymbolTable 6 {}) _lpython_main_program [] [(SubroutineCall 1 main0 () [] ())] Source Public Implementation () .false. .false.), main0: (Subroutine (SymbolTable 4 {a: (Variable 4 a Local () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 4 b Local () () Default (Integer 4 []) Source Public Required .false.), i: (Variable 4 i Local () () Default (Integer 8 []) Source Public Required .false.)}) main0 [] [(= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) ()) (Assert (Compare (FunctionCall 1 test_multiply () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 50 (Integer 4 [])) (Integer 4 []) (IntegerConstant -50 (Integer 4 []))) (Logical 4 []) () ()) ()) (= (Var 4 i) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) ()) (= (Var 4 i) (IntegerBinOp (Var 4 i) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Integer 8 []) ()) ()) (Assert (Compare (Var 4 i) Eq (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitOr (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 32769 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitAnd (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 0 (Integer 4 []))) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitAnd (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 105348 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitXor (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitXor (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant 72579 (Integer 4 []))) Eq (IntegerConstant 72579 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 5 (Integer 4 []))) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 5 (Integer 4 [])) BitLShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 10 (Integer 4 []))) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ())] Source Public Implementation () .false. .false.), main_program: (Program (SymbolTable 5 {}) main_program [] [(SubroutineCall 1 _lpython_main_program () [] ())]), test_mod: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 3 a In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 3 b In () () Default (Integer 4 []) Source Public Required .false.)}) test_mod [(Var 3 a) (Var 3 b)] [(= (Var 3 _lpython_return_variable) (IntegerBinOp (Var 3 a) Mod (Var 3 b) (Integer 4 []) ()) ()) (Return)] (Var 3 _lpython_return_variable) Source Public Implementation ()), test_multiply: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 2 a In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 2 b In () () Default (Integer 4 []) Source Public Required .false.)}) test_multiply [(Var 2 a) (Var 2 b)] [(= (Var 2 _lpython_return_variable) (IntegerBinOp (Var 2 a) Mul (Var 2 b) (Integer 4 []) ()) ()) (Return)] (Var 2 _lpython_return_variable) Source Public Implementation ())}) [])
(TranslationUnit (SymbolTable 1 {_lpython_main_program: (Subroutine (SymbolTable 6 {}) _lpython_main_program [] [(SubroutineCall 1 main0 () [] ())] Source Public Implementation () .false. .false.), main0: (Subroutine (SymbolTable 4 {a: (Variable 4 a Local () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 4 b Local () () Default (Integer 4 []) Source Public Required .false.), i: (Variable 4 i Local () () Default (Integer 8 []) Source Public Required .false.), i1: (Variable 4 i1 Local () () Default (Integer 4 []) Source Public Required .false.), i2: (Variable 4 i2 Local () () Default (Integer 4 []) Source Public Required .false.), i3: (Variable 4 i3 Local () () Default (Integer 4 []) Source Public Required .false.), i4: (Variable 4 i4 Local () () Default (Integer 4 []) Source Public Required .false.)}) main0 [] [(= (Var 4 a) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) ()) (Assert (Compare (FunctionCall 1 test_multiply () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerUnaryMinus (IntegerConstant 50 (Integer 4 [])) (Integer 4 []) (IntegerConstant -50 (Integer 4 []))) (Logical 4 []) () ()) ()) (= (Var 4 i) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) ()) (= (Var 4 i) (IntegerBinOp (Var 4 i) Add (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Integer 8 []) ()) ()) (Assert (Compare (Var 4 i) Eq (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) () ()) ()) (= (Var 4 a) (IntegerConstant 2 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 5 (Integer 4 [])) ()) (Assert (Compare (FunctionCall 1 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (FunctionCall 1 test_mod () [((IntegerConstant 23 (Integer 4 []))) ((IntegerConstant 3 (Integer 4 [])))] (Integer 4 []) () ()) Eq (IntegerConstant 2 (Integer 4 [])) (Logical 4 []) () ()) ()) (= (Var 4 a) (IntegerConstant 123282374 (Integer 4 [])) ()) (= (Var 4 b) (IntegerConstant 32771 (Integer 4 [])) ()) (Assert (Compare (FunctionCall 1 test_mod () [((Var 4 a)) ((Var 4 b))] (Integer 4 []) () ()) Eq (IntegerConstant 30643 (Integer 4 [])) (Logical 4 []) () ()) ()) (= (Var 4 a) (IntegerUnaryMinus (IntegerConstant 5345 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5345 (Integer 4 []))) ()) (= (Var 4 b) (IntegerUnaryMinus (IntegerConstant 534 (Integer 4 [])) (Integer 4 []) (IntegerConstant -534 (Integer 4 []))) ()) (Assert (Compare (IntegerBinOp (Var 4 a) Mod (Var 4 b) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 5 (Integer 4 [])) (Integer 4 []) (IntegerConstant -5 (Integer 4 []))) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitOr (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitOr (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 32769 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32769 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitAnd (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 0 (Integer 4 []))) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitAnd (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) Eq (IntegerUnaryMinus (IntegerConstant 105348 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105348 (Integer 4 []))) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitXor (IntegerConstant 4 (Integer 4 [])) (Integer 4 []) (IntegerConstant 14 (Integer 4 []))) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (IntegerConstant 105346 (Integer 4 [])) (Integer 4 []) (IntegerConstant -105346 (Integer 4 []))) BitXor (IntegerUnaryMinus (IntegerConstant 32771 (Integer 4 [])) (Integer 4 []) (IntegerConstant -32771 (Integer 4 []))) (Integer 4 []) (IntegerConstant 72579 (Integer 4 []))) Eq (IntegerConstant 72579 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 10 (Integer 4 [])) BitRShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 5 (Integer 4 []))) Eq (IntegerConstant 5 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (Assert (Compare (IntegerBinOp (IntegerConstant 5 (Integer 4 [])) BitLShift (IntegerConstant 1 (Integer 4 [])) (Integer 4 []) (IntegerConstant 10 (Integer 4 []))) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) (LogicalConstant .true. (Logical 4 [])) ()) ()) (= (Var 4 i1) (IntegerConstant 10 (Integer 4 [])) ()) (= (Var 4 i2) (IntegerConstant 4 (Integer 4 [])) ()) (Assert (Compare (IntegerBinOp (Var 4 i1) BitAnd (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (Var 4 i1) BitOr (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (Var 4 i1) BitXor (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 14 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (Var 4 i1) (Integer 4 []) ()) BitXor (IntegerUnaryMinus (Var 4 i2) (Integer 4 []) ()) (Integer 4 []) ()) Eq (IntegerConstant 10 (Integer 4 [])) (Logical 4 []) () ()) ()) (= (Var 4 i3) (IntegerConstant 432534534 (Integer 4 [])) ()) (= (Var 4 i4) (IntegerUnaryMinus (IntegerConstant 4325 (Integer 4 [])) (Integer 4 []) (IntegerConstant -4325 (Integer 4 []))) ()) (Assert (Compare (IntegerBinOp (Var 4 i3) BitOr (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 225 (Integer 4 [])) (Integer 4 []) (IntegerConstant -225 (Integer 4 []))) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitAnd (Var 4 i4) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 432534758 (Integer 4 [])) (Integer 4 []) (IntegerConstant -432534758 (Integer 4 []))) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (IntegerUnaryMinus (Var 4 i3) (Integer 4 []) ()) BitXor (Var 4 i4) (Integer 4 []) ()) Eq (IntegerConstant 432530657 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (Var 4 i1) BitLShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 160 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (Var 4 i1) BitRShift (Var 4 i2) (Integer 4 []) ()) Eq (IntegerConstant 0 (Integer 4 [])) (Logical 4 []) () ()) ()) (Assert (Compare (IntegerBinOp (Var 4 i4) BitRShift (IntegerConstant 3 (Integer 4 [])) (Integer 4 []) ()) Eq (IntegerUnaryMinus (IntegerConstant 541 (Integer 4 [])) (Integer 4 []) (IntegerConstant -541 (Integer 4 []))) (Logical 4 []) () ()) ())] Source Public Implementation () .false. .false.), main_program: (Program (SymbolTable 5 {}) main_program [] [(SubroutineCall 1 _lpython_main_program () [] ())]), test_mod: (Function (SymbolTable 3 {_lpython_return_variable: (Variable 3 _lpython_return_variable ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 3 a In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 3 b In () () Default (Integer 4 []) Source Public Required .false.)}) test_mod [(Var 3 a) (Var 3 b)] [(= (Var 3 _lpython_return_variable) (IntegerBinOp (Var 3 a) Mod (Var 3 b) (Integer 4 []) ()) ()) (Return)] (Var 3 _lpython_return_variable) Source Public Implementation ()), test_multiply: (Function (SymbolTable 2 {_lpython_return_variable: (Variable 2 _lpython_return_variable ReturnVar () () Default (Integer 4 []) Source Public Required .false.), a: (Variable 2 a In () () Default (Integer 4 []) Source Public Required .false.), b: (Variable 2 b In () () Default (Integer 4 []) Source Public Required .false.)}) test_multiply [(Var 2 a) (Var 2 b)] [(= (Var 2 _lpython_return_variable) (IntegerBinOp (Var 2 a) Mul (Var 2 b) (Integer 4 []) ()) ()) (Return)] (Var 2 _lpython_return_variable) Source Public Implementation ())}) [])

0 comments on commit dd526d9

Please sign in to comment.