com php-src: Convert ASSIGN_ADD $a, $b into $ a = ADD $a, $b, if possible.: ext/o pcache/Optimizer/dfa_pass.c
| From: | Dmitry Stogov | Date: | Tue, 22 Mar 2016 20:57:26 +0000 |
| Subject: | com php-src: Convert ASSIGN_ADD $a, $b into $ a = ADD $a, $b, if possible.: ext/o pcache/Optimizer/dfa_pass.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-91462@lists.php.net to get a copy of this message | ||
Commit: d8b75b0807a5d94bd7b6b175d56aba8bc5be8d7a
Author: Dmitry Stogov <dmitry@zend.com> Tue, 22 Mar 2016 23:57:26 +0300
Parents: 76d612129bb6b67171308f43c19d7e4791d7919e
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d8b75b0807a5d94bd7b6b175d56aba8bc5be8d7a
Log:
Convert ASSIGN_ADD $a, $b into $a = ADD $a, $b, if possible.
Changed paths:
M ext/opcache/Optimizer/dfa_pass.c
Diff:
diff --git a/ext/opcache/Optimizer/dfa_pass.c b/ext/opcache/Optimizer/dfa_pass.c
index c4d2535..12a83f0 100644
--- a/ext/opcache/Optimizer/dfa_pass.c
+++ b/ext/opcache/Optimizer/dfa_pass.c
@@ -431,6 +431,31 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx
*ctx
op_array->opcodes[op2].opcode = ZEND_PRE_DEC;
SET_UNUSED(op_array->opcodes[op2].op2);
+ } else if (ssa->ops[op2].op1_def == i
+ && !RETURN_VALUE_USED(&op_array->opcodes[op2])
+ && ssa->ops[op2].op1_use >= 0
+ && !(ssa->var_info[ssa->ops[op2].op1_use].type &
(MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))
+ && (op_array->opcodes[op2].opcode == ZEND_ASSIGN_ADD
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_SUB
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_MUL
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_DIV
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_MOD
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_SL
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_SR
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_BW_OR
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_BW_AND
+ || op_array->opcodes[op2].opcode == ZEND_ASSIGN_BW_XOR)
+ && op_array->opcodes[op2].extended_value == 0) {
+
+ /* Reconstruct SSA */
+ ssa->ops[op2].result_def = ssa->ops[op2].op1_def;
+ ssa->ops[op2].op1_def = -1;
+
+ /* Update opcode */
+ op_array->opcodes[op2].opcode -= (ZEND_ASSIGN_ADD - ZEND_ADD);
+ op_array->opcodes[op2].result_type = op_array->opcodes[op2].op1_type;
+ op_array->opcodes[op2].result.var = op_array->opcodes[op2].op1.var;
+
}
}
if (remove_nops) {