Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains.

This commit is contained in:
Dmitry Stogov 2017-07-12 20:31:27 +03:00
parent a651564f29
commit a247cee80b

View file

@ -470,6 +470,15 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
} }
} }
if (ZEND_OPTIMIZER_PASS_14 & ctx->optimization_level) {
if (dce_optimize_op_array(op_array, ssa, 0)) {
remove_nops = 1;
}
if (ctx->debug_level & ZEND_DUMP_AFTER_PASS_14) {
zend_dump_op_array(op_array, ZEND_DUMP_SSA, "after dce pass", ssa);
}
}
for (v = op_array->last_var; v < ssa->vars_count; v++) { for (v = op_array->last_var; v < ssa->vars_count; v++) {
op_1 = ssa->vars[v].definition; op_1 = ssa->vars[v].definition;
@ -719,15 +728,6 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
} }
} }
if (ZEND_OPTIMIZER_PASS_14 & ctx->optimization_level) {
if (dce_optimize_op_array(op_array, ssa, 0)) {
remove_nops = 1;
}
if (ctx->debug_level & ZEND_DUMP_AFTER_PASS_14) {
zend_dump_op_array(op_array, ZEND_DUMP_SSA, "after dce pass", ssa);
}
}
if (remove_nops) { if (remove_nops) {
zend_ssa_remove_nops(op_array, ssa); zend_ssa_remove_nops(op_array, ssa);
} }