mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-01-18 22:31:36 +00:00
strength reduct (a - (-b)) into (a + b)
This commit is contained in:
parent
23904bad52
commit
87a43777ab
1 changed files with 15 additions and 0 deletions
15
ast.c
15
ast.c
|
@ -441,6 +441,21 @@ ast_binary* ast_binary_new(lex_ctx_t ctx, int op,
|
||||||
ast_instantiate(ast_binary, ctx, ast_binary_delete);
|
ast_instantiate(ast_binary, ctx, ast_binary_delete);
|
||||||
ast_expression_init((ast_expression*)self, (ast_expression_codegen*)&ast_binary_codegen);
|
ast_expression_init((ast_expression*)self, (ast_expression_codegen*)&ast_binary_codegen);
|
||||||
|
|
||||||
|
if (ast_istype(right, ast_unary) && OPTS_OPTIMIZATION(OPTIM_PEEPHOLE)) {
|
||||||
|
ast_expression *normal = ((ast_unary*)right)->operand;
|
||||||
|
|
||||||
|
/* make a-(-b) => a + b */
|
||||||
|
if (op == INSTR_SUB_F) {
|
||||||
|
op = INSTR_ADD_F;
|
||||||
|
right = normal;
|
||||||
|
++opts_optimizationcount[OPTIM_PEEPHOLE];
|
||||||
|
} else if (op == INSTR_SUB_V) {
|
||||||
|
op = INSTR_ADD_V;
|
||||||
|
right = normal;
|
||||||
|
++opts_optimizationcount[OPTIM_PEEPHOLE];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self->op = op;
|
self->op = op;
|
||||||
self->left = left;
|
self->left = left;
|
||||||
self->right = right;
|
self->right = right;
|
||||||
|
|
Loading…
Reference in a new issue