Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions Zend/Optimizer/block_pass.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
if (src < op_array->opcodes + block->start) {
break;
}
src->result_type = IS_UNUSED;
SET_UNUSED(src->result);
VAR_SOURCE(opline->op1) = NULL;
MAKE_NOP(opline);
++(*opt_count);
Expand All @@ -325,7 +325,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
src->opcode != ZEND_FETCH_OBJ_R &&
src->opcode != ZEND_NEW &&
src->opcode != ZEND_FETCH_THIS) {
src->result_type = IS_UNUSED;
SET_UNUSED(src->result);
MAKE_NOP(opline);
++(*opt_count);
if (src->opcode == ZEND_QM_ASSIGN) {
Expand Down Expand Up @@ -413,8 +413,8 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
literal_dtor(&ZEND_OP1_LITERAL(opline));
literal_dtor(&ZEND_OP2_LITERAL(opline));
opline->opcode = ZEND_JMP;
opline->op1_type = IS_UNUSED;
opline->op2_type = IS_UNUSED;
SET_UNUSED(opline->op1);
SET_UNUSED(opline->op2);
block->successors_count = 1;
block->successors[0] = target;
}
Expand Down Expand Up @@ -538,7 +538,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
}
}
break;

case ZEND_BOOL:
case ZEND_BOOL_NOT:
optimize_bool:
Expand Down Expand Up @@ -829,7 +829,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
opline->opcode = ZEND_CAST;
opline->extended_value = IS_STRING;
COPY_NODE(opline->op1, opline->op2);
opline->op2_type = IS_UNUSED;
SET_UNUSED(opline->op2);
opline->op2.var = 0;
++(*opt_count);
} else if (opline->op2_type == IS_CONST &&
Expand All @@ -839,7 +839,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
literal_dtor(&ZEND_OP2_LITERAL(opline));
opline->opcode = ZEND_CAST;
opline->extended_value = IS_STRING;
opline->op2_type = IS_UNUSED;
SET_UNUSED(opline->op2);
opline->op2.var = 0;
++(*opt_count);
} else if (opline->opcode == ZEND_CONCAT &&
Expand Down Expand Up @@ -902,6 +902,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
if (zend_optimizer_eval_unary_op(&result, opline->opcode, &ZEND_OP1_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
SET_UNUSED(opline->op2);
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
}
Expand All @@ -916,6 +917,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
if (zend_optimizer_eval_cast(&result, opline->extended_value, &ZEND_OP1_LITERAL(opline)) == SUCCESS) {
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->opcode = ZEND_QM_ASSIGN;
SET_UNUSED(opline->op2);
opline->extended_value = 0;
zend_optimizer_update_op1_const(op_array, opline, &result);
++(*opt_count);
Expand Down Expand Up @@ -1614,7 +1616,7 @@ static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset use
case ZEND_DO_ICALL:
case ZEND_DO_UCALL:
case ZEND_DO_FCALL_BY_NAME:
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
break;
case ZEND_POST_INC:
case ZEND_POST_DEC:
Expand All @@ -1623,7 +1625,7 @@ static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset use
case ZEND_POST_INC_STATIC_PROP:
case ZEND_POST_DEC_STATIC_PROP:
opline->opcode -= 2;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
break;
case ZEND_QM_ASSIGN:
case ZEND_BOOL:
Expand Down
3 changes: 1 addition & 2 deletions Zend/Optimizer/dce.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,8 +377,7 @@ static bool try_remove_var_def(context *ctx, int free_var, int use_chain, zend_o
case ZEND_YIELD:
case ZEND_YIELD_FROM:
case ZEND_ASSERT_CHECK:
def_opline->result_type = IS_UNUSED;
def_opline->result.var = 0;
SET_UNUSED(def_opline->result);
def_op->result_def = -1;
var->definition = -1;
return 1;
Expand Down
22 changes: 9 additions & 13 deletions Zend/Optimizer/dfa_pass.c
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
if (ssa->vars[ssa_op->result_def].use_chain < 0
&& ssa->vars[ssa_op->result_def].phi_use_chain == NULL) {
opline->opcode = ZEND_JMPZ;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
goto optimize_jmpz;
} else if (opline->op1_type == IS_CONST) {
Expand All @@ -815,7 +815,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
if (ssa->vars[ssa_op->result_def].use_chain < 0
&& ssa->vars[ssa_op->result_def].phi_use_chain == NULL) {
opline->opcode = ZEND_JMPNZ;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
goto optimize_jmpnz;
} else if (opline->op1_type == IS_CONST) {
Expand All @@ -829,7 +829,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
if (ssa->vars[ssa_op->result_def].use_chain < 0
&& ssa->vars[ssa_op->result_def].phi_use_chain == NULL) {
opline->opcode = ZEND_JMPNZ;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
goto optimize_jmpnz;
} else if (opline->op1_type == IS_CONST) {
Expand All @@ -855,7 +855,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
goto optimize_nop;
} else {
opline->opcode = ZEND_JMP;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
COPY_NODE(opline->op1, opline->op2);
take_successor_0(ssa, block_num, block);
Expand All @@ -871,7 +871,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa)
&& var->use_chain < 0 && var->phi_use_chain == NULL) {
if (Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op1.constant)) == IS_NULL) {
opline->opcode = ZEND_JMP;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
COPY_NODE(opline->op1, opline->op2);
take_successor_0(ssa, block_num, block);
Expand Down Expand Up @@ -1000,8 +1000,7 @@ static bool zend_dfa_try_to_replace_result(zend_op_array *op_array, zend_ssa *ss
ssa->vars[result_var].use_chain = -1;
ssa->ops[def].result_def = -1;

op_array->opcodes[def].result_type = IS_UNUSED;
op_array->opcodes[def].result.var = 0;
SET_UNUSED(op_array->opcodes[def].result);

if (ssa->ops[use].op1_use == result_var) {
ssa->ops[use].op1_use = cv_var;
Expand Down Expand Up @@ -1167,8 +1166,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
opline->opcode = ZEND_QM_ASSIGN;
opline->op1_type = opline->op2_type;
opline->op1.var = opline->op2.var;
opline->op2_type = IS_UNUSED;
opline->op2.num = 0;
SET_UNUSED(opline->op2);
ssa->ops[op_1].op1_use = ssa->ops[op_1].op2_use;
ssa->ops[op_1].op1_use_chain = ssa->ops[op_1].op2_use_chain;
ssa->ops[op_1].op2_use = -1;
Expand Down Expand Up @@ -1216,8 +1214,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
// op_1: #v.? = ADD #?.? [double,long], 0 => #v.? = QM_ASSIGN #?.?

opline->opcode = ZEND_QM_ASSIGN;
opline->op2_type = IS_UNUSED;
opline->op2.num = 0;
SET_UNUSED(opline->op2);
}
} else if (opline->opcode == ZEND_MUL
&& (OP1_INFO() & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) == 0) {
Expand Down Expand Up @@ -1587,8 +1584,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
opline->result.var = opline->op1.var;
opline->op1_type = opline->op2_type;
opline->op1.var = opline->op2.var;
opline->op2_type = IS_UNUSED;
opline->op2.var = 0;
SET_UNUSED(opline->op2);
opline->opcode = ZEND_QM_ASSIGN;
}
}
Expand Down
4 changes: 2 additions & 2 deletions Zend/Optimizer/pass1.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
opline->opcode = ZEND_DECLARE_CONST;
opline->op1_type = IS_CONST;
opline->op2_type = IS_CONST;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
opline->op1.constant = send1_opline->op1.constant;
opline->op2.constant = send2_opline->op1.constant;
opline->result.num = 0;
Expand Down Expand Up @@ -321,7 +321,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
should_jmp = !should_jmp;
}
literal_dtor(&ZEND_OP1_LITERAL(opline));
opline->op1_type = IS_UNUSED;
SET_UNUSED(opline->op1);
if (should_jmp) {
opline->opcode = ZEND_JMP;
COPY_NODE(opline->op1, opline->op2);
Expand Down
8 changes: 4 additions & 4 deletions Zend/Optimizer/sccp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2134,7 +2134,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
if (opline->opcode == ZEND_ASSIGN) {
/* We can't drop the ASSIGN, but we can remove the result. */
if (var->use_chain < 0 && var->phi_use_chain == NULL) {
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
}
return 0;
Expand Down Expand Up @@ -2165,7 +2165,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
case ZEND_YIELD:
case ZEND_YIELD_FROM:
case ZEND_ASSERT_CHECK:
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
zend_ssa_remove_result_def(ssa, ssa_op);
break;
default:
Expand Down Expand Up @@ -2237,7 +2237,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
* operand, based on type inference information. Make sure the operand is
* freed and leave further cleanup to DCE. */
opline->opcode = ZEND_FREE;
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
removed_ops++;
} else {
return 0;
Expand Down Expand Up @@ -2305,7 +2305,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
if (ssa->vars[ssa_op->result_def].use_chain < 0
&& ssa->vars[ssa_op->result_def].phi_use_chain == NULL) {
zend_ssa_remove_result_def(ssa, ssa_op);
opline->result_type = IS_UNUSED;
SET_UNUSED(opline->result);
} else if (opline->opcode != ZEND_PRE_INC &&
opline->opcode != ZEND_PRE_DEC) {
/* op1_def and result_def are different */
Expand Down
13 changes: 7 additions & 6 deletions Zend/zend_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -2708,7 +2708,7 @@ void zend_emit_final_return(bool return_one) /* {{{ */
}

ret = zend_emit_op(NULL, returns_reference ? ZEND_RETURN_BY_REF : ZEND_RETURN, &zn, NULL);
ret->extended_value = -1;
ret->extended_value = 0;
}
/* }}} */

Expand Down Expand Up @@ -3051,7 +3051,7 @@ static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, uint32_t
zend_ast *dim_ast = ast->child[1];
zend_op *opline;

znode var_node, dim_node;
znode var_node, dim_node = {0};

if (is_globals_fetch(var_ast)) {
if (dim_ast == NULL) {
Expand Down Expand Up @@ -3121,7 +3121,7 @@ static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t
zend_ast *obj_ast = ast->child[0];
zend_ast *prop_ast = ast->child[1];

znode obj_node, prop_node;
znode obj_node = {0}, prop_node;
zend_op *opline;
bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_PROP;

Expand Down Expand Up @@ -5236,7 +5236,7 @@ static void zend_compile_method_call(znode *result, zend_ast *ast, uint32_t type
zend_ast *method_ast = ast->child[1];
zend_ast *args_ast = ast->child[2];

znode obj_node, method_node;
znode obj_node = {0}, method_node;
zend_op *opline;
zend_function *fbc = NULL;
bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL;
Expand Down Expand Up @@ -5349,6 +5349,7 @@ static void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type
if (zend_is_constructor(Z_STR_P(name))) {
zval_ptr_dtor(name);
method_node.op_type = IS_UNUSED;
method_node.u.op.num = 0;
}
}

Expand Down Expand Up @@ -7782,7 +7783,7 @@ static void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast, uint32

CG(zend_lineno) = param_ast->lineno;

znode var_node, default_node;
znode var_node, default_node = {0};
uint8_t opcode;
zend_op *opline;
zend_arg_info *arg_info;
Expand Down Expand Up @@ -11221,7 +11222,7 @@ static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */
uint32_t i, j;
uint32_t rope_init_lineno = -1;
zend_op *opline = NULL, *init_opline;
znode elem_node, last_const_node;
znode elem_node, last_const_node = {0};
zend_ast_list *list = zend_ast_get_list(ast);
uint32_t reserved_op_number = -1;

Expand Down
2 changes: 1 addition & 1 deletion Zend/zend_compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

#define SET_UNUSED(op) do { \
op ## _type = IS_UNUSED; \
op.num = (uint32_t) -1; \
op.num = 0; \
} while (0)

#define MAKE_NOP(opline) do { \
Expand Down
Loading
Loading