compiler

Unnamed Compiled Systems Language Project
git clone http://frotz.net/git/compiler.git
Log | Files | Refs

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:
Msrc/codegen-ir.c | 2+-
Msrc/codegen-risc5-simple.c | 3++-
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 ...