From: Wolfgang (Blub) Bumiller Date: Fri, 30 Nov 2012 11:21:10 +0000 (+0100) Subject: ast_ifthen will not create dead blocks anymore X-Git-Tag: 0.1.9~193 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=a19849099c1639170caae8191180f16e0e943c98;p=xonotic%2Fgmqcc.git ast_ifthen will not create dead blocks anymore --- diff --git a/ast.c b/ast.c index 604e6a0..7afe3fb 100644 --- a/ast.c +++ b/ast.c @@ -2143,26 +2143,29 @@ bool ast_ifthen_codegen(ast_ifthen *self, ast_function *func, bool lvalue, ir_va onfalse = NULL; /* Merge block were they all merge in to */ - merge = ir_function_create_block(ast_ctx(self), func->ir_func, ast_function_label(func, "endif")); - if (!merge) - return false; - /* add jumps ot the merge block */ - if (ontrue && !ontrue_endblock->final && !ir_block_create_jump(ontrue_endblock, merge)) - return false; - if (onfalse && !onfalse_endblock->final && !ir_block_create_jump(onfalse_endblock, merge)) - return false; - - /* we create the if here, that way all blocks are ordered :) - */ - if (!ir_block_create_if(cond, condval, - (ontrue ? ontrue : merge), - (onfalse ? onfalse : merge))) + if (!ontrue || !onfalse || !ontrue_endblock->final || !onfalse_endblock->final) { - return false; - } + merge = ir_function_create_block(ast_ctx(self), func->ir_func, ast_function_label(func, "endif")); + if (!merge) + return false; + /* add jumps ot the merge block */ + if (ontrue && !ontrue_endblock->final && !ir_block_create_jump(ontrue_endblock, merge)) + return false; + if (onfalse && !onfalse_endblock->final && !ir_block_create_jump(onfalse_endblock, merge)) + return false; - /* Now enter the merge block */ - func->curblock = merge; + /* we create the if here, that way all blocks are ordered :) + */ + if (!ir_block_create_if(cond, condval, + (ontrue ? ontrue : merge), + (onfalse ? onfalse : merge))) + { + return false; + } + + /* Now enter the merge block */ + func->curblock = merge; + } return true; }