diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index c201b0c..5871f5c 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -310,7 +310,7 @@ std::any SysYIRGenerator::visitIfStmt(SysYParser::IfStmtContext *ctx) { builder.popTrueBlock(); builder.popFalseBlock(); - labelstring << "then.L" << builder.getLabelIndex(); + labelstring << "if_then.L" << builder.getLabelIndex(); thenBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(thenBlock); @@ -329,7 +329,7 @@ std::any SysYIRGenerator::visitIfStmt(SysYParser::IfStmtContext *ctx) { builder.createUncondBrInst(exitBlock, {}); BasicBlock::conectBlocks(builder.getBasicBlock(), exitBlock); - labelstring << "else.L" << builder.getLabelIndex(); + labelstring << "if_else.L" << builder.getLabelIndex(); elseBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(elseBlock); @@ -346,7 +346,7 @@ std::any SysYIRGenerator::visitIfStmt(SysYParser::IfStmtContext *ctx) { builder.createUncondBrInst(exitBlock, {}); BasicBlock::conectBlocks(builder.getBasicBlock(), exitBlock); - labelstring << "exit.L" << builder.getLabelIndex(); + labelstring << "if_exit.L" << builder.getLabelIndex(); exitBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(exitBlock); @@ -359,7 +359,7 @@ std::any SysYIRGenerator::visitIfStmt(SysYParser::IfStmtContext *ctx) { builder.popTrueBlock(); builder.popFalseBlock(); - labelstring << "then.L" << builder.getLabelIndex(); + labelstring << "if_then.L" << builder.getLabelIndex(); thenBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(thenBlock); @@ -375,7 +375,7 @@ std::any SysYIRGenerator::visitIfStmt(SysYParser::IfStmtContext *ctx) { } BasicBlock::conectBlocks(builder.getBasicBlock(), exitBlock); - labelstring << "exit.L" << builder.getLabelIndex(); + labelstring << "if_exit.L" << builder.getLabelIndex(); exitBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(exitBlock); @@ -391,7 +391,7 @@ std::any SysYIRGenerator::visitWhileStmt(SysYParser::WhileStmtContext *ctx) { Function* function = builder.getBasicBlock()->getParent(); std::stringstream labelstring; - labelstring << "head.L" << builder.getLabelIndex(); + labelstring << "while_head.L" << builder.getLabelIndex(); BasicBlock *headBlock = function->addBasicBlock(labelstring.str()); labelstring.str(""); BasicBlock::conectBlocks(curBlock, headBlock); @@ -407,7 +407,7 @@ std::any SysYIRGenerator::visitWhileStmt(SysYParser::WhileStmtContext *ctx) { builder.popTrueBlock(); builder.popFalseBlock(); - labelstring << "body.L" << builder.getLabelIndex(); + labelstring << "while_body.L" << builder.getLabelIndex(); bodyBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(bodyBlock); @@ -431,7 +431,7 @@ std::any SysYIRGenerator::visitWhileStmt(SysYParser::WhileStmtContext *ctx) { builder.popBreakBlock(); builder.popContinueBlock(); - labelstring << "exit.L" << builder.getLabelIndex(); + labelstring << "while_exit.L" << builder.getLabelIndex(); exitBlock->setName(labelstring.str()); labelstring.str(""); function->addBasicBlock(exitBlock); @@ -442,7 +442,7 @@ std::any SysYIRGenerator::visitWhileStmt(SysYParser::WhileStmtContext *ctx) { std::any SysYIRGenerator::visitBreakStmt(SysYParser::BreakStmtContext *ctx) { BasicBlock* breakBlock = builder.getBreakBlock(); - builder.pushBreakBlock(breakBlock); + builder.createUncondBrInst(breakBlock, {}); BasicBlock::conectBlocks(builder.getBasicBlock(), breakBlock); return std::any(); } @@ -450,6 +450,7 @@ std::any SysYIRGenerator::visitBreakStmt(SysYParser::BreakStmtContext *ctx) { std::any SysYIRGenerator::visitContinueStmt(SysYParser::ContinueStmtContext *ctx) { BasicBlock* continueBlock = builder.getContinueBlock(); builder.createUncondBrInst(continueBlock, {}); + BasicBlock::conectBlocks(builder.getBasicBlock(), continueBlock); return std::any(); }