@@ -1427,10 +1427,31 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
14271427 this ->visit_expr (*x.m_right );
14281428 llvm::Value* right = tmp;
14291429 ptr_loads = ptr_loads_copy;
1430- tmp = llvm_utils->is_equal_by_value (left, right, *module ,
1431- ASRUtils::expr_type (x.m_left ));
1432- if (x.m_op == ASR::cmpopType::NotEq) {
1433- tmp = builder->CreateNot (tmp);
1430+
1431+ ASR::ttype_t * int32_type = ASRUtils::TYPE (ASR::make_Integer_t (al, x.base .base .loc , 4 ));
1432+
1433+ if (x.m_op == ASR::cmpopType::Eq || x.m_op == ASR::cmpopType::NotEq) {
1434+ tmp = llvm_utils->is_equal_by_value (left, right, *module ,
1435+ ASRUtils::expr_type (x.m_left ));
1436+ if (x.m_op == ASR::cmpopType::NotEq) {
1437+ tmp = builder->CreateNot (tmp);
1438+ }
1439+ }
1440+ else if (x.m_op == ASR::cmpopType::Lt) {
1441+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1442+ ASRUtils::expr_type (x.m_left ), 0 , int32_type);
1443+ }
1444+ else if (x.m_op == ASR::cmpopType::LtE) {
1445+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1446+ ASRUtils::expr_type (x.m_left ), 1 , int32_type);
1447+ }
1448+ else if (x.m_op == ASR::cmpopType::Gt) {
1449+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1450+ ASRUtils::expr_type (x.m_left ), 2 , int32_type);
1451+ }
1452+ else if (x.m_op == ASR::cmpopType::GtE) {
1453+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1454+ ASRUtils::expr_type (x.m_left ), 3 , int32_type);
14341455 }
14351456 }
14361457
@@ -1761,10 +1782,28 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
17611782 this ->visit_expr (*x.m_right );
17621783 llvm::Value* right = tmp;
17631784 ptr_loads = ptr_loads_copy;
1764- tmp = llvm_utils->is_equal_by_value (left, right, *module ,
1765- ASRUtils::expr_type (x.m_left ));
1766- if (x.m_op == ASR::cmpopType::NotEq) {
1767- tmp = builder->CreateNot (tmp);
1785+ if (x.m_op == ASR::cmpopType::Eq || x.m_op == ASR::cmpopType::NotEq) {
1786+ tmp = llvm_utils->is_equal_by_value (left, right, *module ,
1787+ ASRUtils::expr_type (x.m_left ));
1788+ if (x.m_op == ASR::cmpopType::NotEq) {
1789+ tmp = builder->CreateNot (tmp);
1790+ }
1791+ }
1792+ else if (x.m_op == ASR::cmpopType::Lt) {
1793+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1794+ ASRUtils::expr_type (x.m_left ), 0 );
1795+ }
1796+ else if (x.m_op == ASR::cmpopType::LtE) {
1797+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1798+ ASRUtils::expr_type (x.m_left ), 1 );
1799+ }
1800+ else if (x.m_op == ASR::cmpopType::Gt) {
1801+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1802+ ASRUtils::expr_type (x.m_left ), 2 );
1803+ }
1804+ else if (x.m_op == ASR::cmpopType::GtE) {
1805+ tmp = llvm_utils->is_ineq_by_value (left, right, *module ,
1806+ ASRUtils::expr_type (x.m_left ), 3 );
17681807 }
17691808 }
17701809
0 commit comments