mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-23 03:40:52 +00:00
Fix fold-dce for if(0)
This commit is contained in:
parent
40bcec5044
commit
ee428b9081
1 changed files with 9 additions and 2 deletions
11
fold.c
11
fold.c
|
@ -707,8 +707,15 @@ int fold_cond(ir_value *condval, ast_function *func, ast_ifthen *branch) {
|
||||||
bool isfalse = (fold_immvalue_float(condval) == 0.0f && branch->on_false);
|
bool isfalse = (fold_immvalue_float(condval) == 0.0f && branch->on_false);
|
||||||
ast_expression *path = (istrue) ? branch->on_true :
|
ast_expression *path = (istrue) ? branch->on_true :
|
||||||
(isfalse) ? branch->on_false : NULL;
|
(isfalse) ? branch->on_false : NULL;
|
||||||
if (!path)
|
if (!path) {
|
||||||
return false;
|
/*
|
||||||
|
* no path to take implies that the evaluation is if(0) and there
|
||||||
|
* is no else block. so eliminate all the code.
|
||||||
|
*/
|
||||||
|
++opts_optimizationcount[OPTIM_CONST_FOLD_DCE];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(elide = ir_function_create_block(ast_ctx(branch), func->ir_func, ast_function_label(func, ((istrue) ? "ontrue" : "onfalse")))))
|
if (!(elide = ir_function_create_block(ast_ctx(branch), func->ir_func, ast_function_label(func, ((istrue) ? "ontrue" : "onfalse")))))
|
||||||
return false;
|
return false;
|
||||||
if (!(*(cgen = path->codegen))((ast_expression*)path, func, false, &dummy))
|
if (!(*(cgen = path->codegen))((ast_expression*)path, func, false, &dummy))
|
||||||
|
|
Loading…
Reference in a new issue