Browse Source

Cleanup conditions

pull/3337/head
Dmitry Stogov 7 years ago
parent
commit
1b80de93b8
  1. 10
      Zend/zend_compile.c
  2. 13
      ext/opcache/Optimizer/zend_inference.c

10
Zend/zend_compile.c

@ -723,15 +723,7 @@ void zend_do_free(znode *op1) /* {{{ */
}
if (opline->result_type == IS_VAR
&& opline->result.var == op1->u.op.var) {
if (opline->opcode == ZEND_FETCH_R ||
opline->opcode == ZEND_FETCH_DIM_R ||
opline->opcode == ZEND_FETCH_OBJ_R ||
opline->opcode == ZEND_FETCH_STATIC_PROP_R) {
/* It's very rare and useless case. It's better to use
additional FREE opcode and simplify the FETCH handlers
their selves */
zend_emit_op(NULL, ZEND_FREE, op1, NULL);
} else if (opline->opcode == ZEND_FETCH_THIS) {
if (opline->opcode == ZEND_FETCH_THIS) {
opline->opcode = ZEND_NOP;
opline->result_type = IS_UNUSED;
} else {

13
ext/opcache/Optimizer/zend_inference.c

@ -3290,8 +3290,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
/* FETCH_LIST on a string behaves like FETCH_R on null */
tmp = zend_array_element_type(
opline->opcode != ZEND_FETCH_LIST_R ? t1 : ((t1 & ~MAY_BE_STRING) | MAY_BE_NULL),
opline->opcode != ZEND_FETCH_DIM_R && opline->opcode != ZEND_FETCH_DIM_IS
&& opline->opcode != ZEND_FETCH_LIST_R,
opline->result_type == IS_VAR,
opline->op2_type == IS_UNUSED);
if (opline->opcode == ZEND_FETCH_DIM_W ||
opline->opcode == ZEND_FETCH_DIM_RW ||
@ -3336,7 +3335,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
}
if (ssa_ops[i].result_def >= 0) {
tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
if (opline->opcode == ZEND_FETCH_OBJ_R || opline->opcode == ZEND_FETCH_OBJ_IS) {
if (opline->result_type == IS_TMP_VAR) {
/* can't be REF because of ZVAL_COPY_DEREF() usage */
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
} else {
@ -3442,14 +3441,6 @@ static int zend_update_type_info(const zend_op_array *op_array,
/* Forbidden opcodes */
ZEND_ASSERT(0);
break;
case ZEND_FETCH_R:
case ZEND_FETCH_IS:
case ZEND_FETCH_STATIC_PROP_R:
case ZEND_FETCH_STATIC_PROP_IS:
/* can't be REF because of ZVAL_COPY_DEREF() usage */
tmp = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
break;
default:
unknown_opcode:
if (ssa_ops[i].op1_def >= 0) {

Loading…
Cancel
Save