com php-src: Convert ASSIGN_ADD $cv, int(1) i nto PRE_INC $cv, if it's safe.: ext/opc ache/Optimizer/dfa_pass.c
| From: | Dmitry Stogov | Date: | Tue, 22 Mar 2016 19:50:43 +0000 |
| Subject: | com php-src: Convert ASSIGN_ADD $cv, int(1) i nto PRE_INC $cv, if it's safe.: ext/opc ache/Optimizer/dfa_pass.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-91460@lists.php.net to get a copy of this message | ||
Commit: 94812fa6cde18f67adeb13adcb138c7895a62c38
Author: Dmitry Stogov <dmitry@zend.com> Tue, 22 Mar 2016 22:50:43 +0300
Parents: fa6ce55675c75140339393a0dec7cf5763b950db
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=94812fa6cde18f67adeb13adcb138c7895a62c38
Log:
Convert ASSIGN_ADD $cv, int(1) into PRE_INC $cv, if it's safe.
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 ebddbae..c4d2535 100644
--- a/ext/opcache/Optimizer/dfa_pass.c
+++ b/ext/opcache/Optimizer/dfa_pass.c
@@ -329,8 +329,11 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx
*ctx
for (i = 0; i < ssa->vars_count; i++) {
int op2 = ssa->vars[i].definition;
- if (op2 >= 0
- && op_array->opcodes[op2].opcode == ZEND_ASSIGN
+ if (op2 < 0) {
+ continue;
+ }
+
+ if (op_array->opcodes[op2].opcode == ZEND_ASSIGN
&& op_array->opcodes[op2].op1_type == IS_CV
&& !RETURN_VALUE_USED(&op_array->opcodes[op2])
) {
@@ -403,6 +406,31 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx
*ctx
}
}
}
+
+ } else if (op_array->opcodes[op2].opcode == ZEND_ASSIGN_ADD
+ && op_array->opcodes[op2].extended_value == 0
+ && ssa->ops[op2].op1_def == i
+ && op_array->opcodes[op2].op2_type == IS_CONST
+ && Z_TYPE_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op2].op2.constant)) ==
IS_LONG
+ && Z_LVAL_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op2].op2.constant)) == 1
+ && ssa->ops[op2].op1_use >= 0
+ && !(ssa->var_info[ssa->ops[op2].op1_use].type &
(MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
+
+ op_array->opcodes[op2].opcode = ZEND_PRE_INC;
+ SET_UNUSED(op_array->opcodes[op2].op2);
+
+ } else if (op_array->opcodes[op2].opcode == ZEND_ASSIGN_SUB
+ && op_array->opcodes[op2].extended_value == 0
+ && ssa->ops[op2].op1_def == i
+ && op_array->opcodes[op2].op2_type == IS_CONST
+ && Z_TYPE_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op2].op2.constant)) ==
IS_LONG
+ && Z_LVAL_P(CT_CONSTANT_EX(op_array, op_array->opcodes[op2].op2.constant)) == 1
+ && ssa->ops[op2].op1_use >= 0
+ && !(ssa->var_info[ssa->ops[op2].op1_use].type &
(MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
+
+ op_array->opcodes[op2].opcode = ZEND_PRE_DEC;
+ SET_UNUSED(op_array->opcodes[op2].op2);
+
}
}
if (remove_nops) {