diff --git a/src/SysYFIRBuilder/IRBuilder.cpp b/src/SysYFIRBuilder/IRBuilder.cpp index 9861dda..d47d589 100644 --- a/src/SysYFIRBuilder/IRBuilder.cpp +++ b/src/SysYFIRBuilder/IRBuilder.cpp @@ -20,6 +20,18 @@ size_t Ifnum = 0; Ptr retAlloca; SysYF::Ptr retbb; + +/* enum Condtype +{ + equal, + greater, + less, + ge, + le, + notequal + +}condtype_; */ +SysYF::Ptr _cmp; // store temporary value Ptr tmp_val = nullptr; // types @@ -272,8 +284,22 @@ void IRBuilder::visit(SyntaxTree::IfStmt &node) { bbAfter = BasicBlock::create(module, s + num, ParentFunc); node.cond_exp->accept(*this); - auto CondType = tmp_val->get_type(); - + if(node.else_statement) + builder->create_cond_br(_cmp, bbTrue, bbFalse); + else + builder->create_cond_br(_cmp, bbTrue, bbAfter); + + builder->set_insert_point(bbTrue); + node.if_statement->accept(*this); + builder->create_br(bbAfter); + + if(node.else_statement){ + builder->set_insert_point(bbTrue); + node.else_statement->accept(*this); + builder->create_br(bbAfter); + } + + builder->set_insert_point(bbAfter); } void IRBuilder::visit(SyntaxTree::WhileStmt &node) {}