Skip to content

Commit

Permalink
Merge pull request lcompilers#2171 from Smit-create/i-2170
Browse files Browse the repository at this point in the history
LLVM: Support Unsigned Int in visit_Variable
  • Loading branch information
certik committed Jul 17, 2023
2 parents 71d654a + 244d711 commit ea9715b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
1 change: 1 addition & 0 deletions integration_tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ RUN(NAME test_unary_op_04 LABELS cpython llvm c) # unary bitinvert
RUN(NAME test_unary_op_05 LABELS cpython llvm c) # unsigned unary minus, plus
RUN(NAME test_unary_op_06 LABELS cpython llvm c) # unsigned unary bitnot
RUN(NAME test_unsigned_01 LABELS cpython llvm c) # unsigned bitshift left, right
RUN(NAME test_unsigned_02 LABELS cpython llvm c)
RUN(NAME test_bool_binop LABELS cpython llvm c)
RUN(NAME test_issue_518 LABELS cpython llvm c NOFAST)
RUN(NAME structs_01 LABELS cpython llvm c)
Expand Down
10 changes: 10 additions & 0 deletions integration_tests/test_unsigned_02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from lpython import u16, i32

# test issue 2170

i : i32
u : u16 = u16(32768)
x : i32

for i in range(i32(u)):
x = i * 2
21 changes: 21 additions & 0 deletions src/libasr/codegen/asr_to_llvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2375,6 +2375,27 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
}
}
llvm_symtab[h] = ptr;
} else if (x.m_type->type == ASR::ttypeType::UnsignedInteger) {
int a_kind = down_cast<ASR::UnsignedInteger_t>(x.m_type)->m_kind;
llvm::Type *type;
int init_value_bits = 8*a_kind;
type = llvm_utils->getIntType(a_kind);
llvm::Constant *ptr = module->getOrInsertGlobal(x.m_name,
type);
if (!external) {
if (ASRUtils::is_array(x.m_type)) {
throw CodeGenError("Arrays are not supported by visit_Variable");
}
if (init_value) {
module->getNamedGlobal(x.m_name)->setInitializer(
init_value);
} else {
module->getNamedGlobal(x.m_name)->setInitializer(
llvm::ConstantInt::get(context,
llvm::APInt(init_value_bits, 0)));
}
}
llvm_symtab[h] = ptr;
} else if (x.m_type->type == ASR::ttypeType::Real) {
int a_kind = down_cast<ASR::Real_t>(x.m_type)->m_kind;
llvm::Type *type;
Expand Down

0 comments on commit ea9715b

Please sign in to comment.