From: Dmitry Stogov Date: Tue, 9 Feb 2016 10:12:57 +0000 (+0300) Subject: Cleanup OP_DATA usage. Now only first operand of OP_DATA is used for ASSIGN_DIM,... X-Git-Tag: php-7.1.0alpha1~617^2~54^2^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4095d5f245fc3f1d040270cab8d4c416551094c0;p=php Cleanup OP_DATA usage. Now only first operand of OP_DATA is used for ASSIGN_DIM, ASSIGN_OBJ and ASSIGN_OP (DIM/OBJ) instructions. --- diff --git a/ext/opcache/Optimizer/optimize_temp_vars_5.c b/ext/opcache/Optimizer/optimize_temp_vars_5.c index 31a825e0b9..108bdda6d7 100644 --- a/ext/opcache/Optimizer/optimize_temp_vars_5.c +++ b/ext/opcache/Optimizer/optimize_temp_vars_5.c @@ -139,13 +139,6 @@ void zend_optimize_temporary_variables(zend_op_array *op_array, zend_optimizer_c } } - /* Skip OP_DATA */ - if (opline->opcode == ZEND_OP_DATA && - (opline-1)->opcode == ZEND_ASSIGN_DIM) { - opline--; - continue; - } - if ((ZEND_OP2_TYPE(opline) & (IS_VAR | IS_TMP_VAR))) { currT = VAR_NUM(ZEND_OP2(opline).var) - offset; if (!zend_bitset_in(valid_T, currT)) { @@ -156,19 +149,6 @@ void zend_optimize_temporary_variables(zend_op_array *op_array, zend_optimizer_c ZEND_OP2(opline).var = NUM_VAR(map_T[currT] + offset); } - /* Allocate OP_DATA->op2 after "operands", but before "result" */ - if (opline->opcode == ZEND_ASSIGN_DIM && - (opline + 1)->opcode == ZEND_OP_DATA && - ZEND_OP2_TYPE(opline + 1) & (IS_VAR | IS_TMP_VAR)) { - currT = VAR_NUM(ZEND_OP2(opline + 1).var) - offset; - GET_AVAILABLE_T(); - map_T[currT] = i; - zend_bitset_incl(valid_T, currT); - zend_bitset_excl(taken_T, i); - ZEND_OP2(opline + 1).var = NUM_VAR(i + offset); - var_to_free = i; - } - if (ZEND_RESULT_TYPE(opline) & (IS_VAR | IS_TMP_VAR)) { currT = VAR_NUM(ZEND_RESULT(opline).var) - offset; if (zend_bitset_in(valid_T, currT)) { diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 2dab5aa954..affdaf7aac 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -2204,23 +2204,7 @@ static void zend_update_type_info(const zend_op_array *op_array, zend_class_entry *ce; int j; - if (opline->opcode == ZEND_OP_DATA && - ((opline-1)->opcode == ZEND_ASSIGN_DIM || - (opline-1)->opcode == ZEND_ASSIGN_OBJ || - (opline-1)->opcode == ZEND_ASSIGN_ADD || - (opline-1)->opcode == ZEND_ASSIGN_SUB || - (opline-1)->opcode == ZEND_ASSIGN_MUL || - (opline-1)->opcode == ZEND_ASSIGN_DIV || - (opline-1)->opcode == ZEND_ASSIGN_MOD || - (opline-1)->opcode == ZEND_ASSIGN_SL || - (opline-1)->opcode == ZEND_ASSIGN_SR || - (opline-1)->opcode == ZEND_ASSIGN_CONCAT || - (opline-1)->opcode == ZEND_ASSIGN_BW_OR || - (opline-1)->opcode == ZEND_ASSIGN_BW_AND || - (opline-1)->opcode == ZEND_ASSIGN_BW_XOR || - (opline-1)->opcode == ZEND_ASSIGN_POW || - (opline-1)->opcode == ZEND_FE_FETCH_R || - (opline-1)->opcode == ZEND_FE_FETCH_RW)) { + if (opline->opcode == ZEND_OP_DATA) { opline--; i--; } diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 47c76207a3..e2a12de108 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -307,26 +307,6 @@ int zend_optimizer_update_op2_const(zend_op_array *op_array, opline->op2.constant = zend_optimizer_add_literal(op_array, val); } break; - case ZEND_OP_DATA: - if ((opline-1)->opcode != ZEND_ASSIGN_DIM && - ((opline-1)->extended_value != ZEND_ASSIGN_DIM || - ((opline-1)->opcode != ZEND_ASSIGN_ADD && - (opline-1)->opcode != ZEND_ASSIGN_SUB && - (opline-1)->opcode != ZEND_ASSIGN_MUL && - (opline-1)->opcode != ZEND_ASSIGN_DIV && - (opline-1)->opcode != ZEND_ASSIGN_POW && - (opline-1)->opcode != ZEND_ASSIGN_MOD && - (opline-1)->opcode != ZEND_ASSIGN_SL && - (opline-1)->opcode != ZEND_ASSIGN_SR && - (opline-1)->opcode != ZEND_ASSIGN_CONCAT && - (opline-1)->opcode != ZEND_ASSIGN_BW_OR && - (opline-1)->opcode != ZEND_ASSIGN_BW_AND && - (opline-1)->opcode != ZEND_ASSIGN_BW_XOR)) - ) { - opline->op2.constant = zend_optimizer_add_literal(op_array, val); - break; - } - /* break missing intentionally */ case ZEND_ISSET_ISEMPTY_DIM_OBJ: case ZEND_ADD_ARRAY_ELEMENT: case ZEND_INIT_ARRAY: diff --git a/ext/opcache/Optimizer/zend_ssa.c b/ext/opcache/Optimizer/zend_ssa.c index 8ed6f4b3eb..08203ec0c7 100644 --- a/ext/opcache/Optimizer/zend_ssa.c +++ b/ext/opcache/Optimizer/zend_ssa.c @@ -498,29 +498,8 @@ static int zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, //USE_SSA_VAR(next->op2.var); } else if (next->op2_type == IS_VAR || next->op2_type == IS_TMP_VAR) { - /* ZEND_ASSIGN_??? use the second operand - of the following OP_DATA instruction as - a temporary variable */ - switch (opline->opcode) { - case ZEND_ASSIGN_DIM: - case ZEND_ASSIGN_OBJ: - case ZEND_ASSIGN_ADD: - case ZEND_ASSIGN_SUB: - case ZEND_ASSIGN_MUL: - case ZEND_ASSIGN_DIV: - case ZEND_ASSIGN_MOD: - case ZEND_ASSIGN_SL: - case ZEND_ASSIGN_SR: - case ZEND_ASSIGN_CONCAT: - case ZEND_ASSIGN_BW_OR: - case ZEND_ASSIGN_BW_AND: - case ZEND_ASSIGN_BW_XOR: - case ZEND_ASSIGN_POW: - break; - default: - ssa_ops[k + 1].op2_use = var[EX_VAR_TO_NUM(next->op2.var)]; - //USE_SSA_VAR(op_array->last_var + next->op2.var); - } + ssa_ops[k + 1].op2_use = var[EX_VAR_TO_NUM(next->op2.var)]; + //USE_SSA_VAR(op_array->last_var + next->op2.var); } } if (opline->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {