commit 1b31a2f77c0c780685aa8c3bfe0327ff1129350c
parent bc5273a07672adfe2b38bc87444ef69be60a1aa4
Author: Brian Swetland <swetland@frotz.net>
Date: Tue, 14 Dec 2021 18:04:41 -0800
fix if-else branch flow broken by last optimization
life demo works again!
Diffstat:
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/codegen-ir.c b/src/codegen-ir.c
@@ -487,7 +487,7 @@ void gen_if_else(Ast node) {
if (node->kind == AST_IFELSE) { // ifelse ...
gen_trace("gen_ifelse()");
- i32 l0_br_false = gen_branch_if_expr_false(node->c0, label_get());
+ l0_br_false = gen_branch_if_expr_false(node->c0, label_get());
gen_block(node->c1);
node = node->c2;
diff --git a/src/codegen-risc5-simple.c b/src/codegen-risc5-simple.c
@@ -412,6 +412,7 @@ u32 gen_relop(Ast node, u32 cc) {
return res;
}
+// returns address of branch to patch
u32 gen_branch_if_expr_false(Ast node) {
if (ast_kind_is_relop(node->kind)) {
u32 cc = rel_op_to_inv_cc_tab[node->kind - AST_EQ];
@@ -599,7 +600,7 @@ void gen_if_else(Ast node) {
if (node->kind == AST_IFELSE) { // ifelse ...
gen_trace("gen_ifelse()");
- u32 l0_br_false = gen_branch_if_expr_false(node->c0);
+ l0_br_false = gen_branch_if_expr_false(node->c0);
gen_block(node->c1);
node = node->c2;
} else { // else ...