|
|
|
|
@ -20,6 +20,18 @@ size_t Ifnum = 0;
|
|
|
|
|
|
|
|
|
|
Ptr<AllocaInst> retAlloca;
|
|
|
|
|
SysYF::Ptr<SysYF::IR::BasicBlock> retbb;
|
|
|
|
|
|
|
|
|
|
/* enum Condtype
|
|
|
|
|
{
|
|
|
|
|
equal,
|
|
|
|
|
greater,
|
|
|
|
|
less,
|
|
|
|
|
ge,
|
|
|
|
|
le,
|
|
|
|
|
notequal
|
|
|
|
|
|
|
|
|
|
}condtype_; */
|
|
|
|
|
SysYF::Ptr<SysYF::IR::CmpInst> _cmp;
|
|
|
|
|
// store temporary value
|
|
|
|
|
Ptr<Value> 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) {}
|
|
|
|
|
|