mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-20 04:35:00 -07:00
Clean up lb_end_procedure_body logic
This commit is contained in:
+3
-22
@@ -2575,37 +2575,18 @@ void lb_end_procedure_body(lbProcedure *p) {
|
||||
}
|
||||
}
|
||||
|
||||
LLVMBasicBlockRef block = nullptr;
|
||||
LLVMBasicBlockRef first_block = LLVMGetFirstBasicBlock(p->value);
|
||||
|
||||
// Remove dead blocks with no code
|
||||
for (block = first_block;
|
||||
block != nullptr;
|
||||
/**/) {
|
||||
LLVMBasicBlockRef next_block = LLVMGetNextBasicBlock(block);
|
||||
LLVMValueRef instr = LLVMGetLastInstruction(block);
|
||||
if (instr == nullptr) {
|
||||
LLVMDeleteBasicBlock(block);
|
||||
}
|
||||
block = next_block;
|
||||
}
|
||||
|
||||
LLVMBasicBlockRef block = nullptr;
|
||||
|
||||
// Make sure every block terminates, and if not, make it unreachable
|
||||
for (block = first_block;
|
||||
block != nullptr;
|
||||
block = LLVMGetNextBasicBlock(block)) {
|
||||
for (block = first_block; block != nullptr; block = LLVMGetNextBasicBlock(block)) {
|
||||
LLVMValueRef instr = LLVMGetLastInstruction(block);
|
||||
if (!lb_is_instr_terminating(instr)) {
|
||||
// NOTE(bill): This is a sanity check
|
||||
LLVMBasicBlockRef prev_block = block;
|
||||
if (instr == nullptr) {
|
||||
LLVMPositionBuilderAtEnd(p->builder, block);
|
||||
LLVMBuildUnreachable(p->builder);
|
||||
LLVMPositionBuilderAtEnd(p->builder, prev_block);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
p->curr_block = nullptr;
|
||||
p->module->state_flags = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user