Lines Matching refs:ssa

50 	zend_ssa *ssa;  member
62 static inline bool is_bad_mod(const zend_ssa *ssa, int use, int def) { in is_bad_mod() argument
67 if (ssa->var_info[use].type & MAY_BE_REF) { in is_bad_mod()
75 zend_op_array *op_array, zend_ssa *ssa, in may_have_side_effects() argument
181 if (is_bad_mod(ssa, ssa_op->op1_use, ssa_op->op1_def)) { in may_have_side_effects()
187 && ssa->vars[ssa_op->op2_use].escape_state != ESCAPE_STATE_NO_ESCAPE) { in may_have_side_effects()
212 return is_bad_mod(ssa, ssa_op->op1_use, ssa_op->op1_def); in may_have_side_effects()
214 return is_bad_mod(ssa, ssa_op->op1_use, ssa_op->op1_def) in may_have_side_effects()
215 || ssa->vars[ssa_op->op1_def].escape_state != ESCAPE_STATE_NO_ESCAPE; in may_have_side_effects()
218 if (is_bad_mod(ssa, ssa_op->op1_use, ssa_op->op1_def) in may_have_side_effects()
219 || ssa->vars[ssa_op->op1_def].escape_state != ESCAPE_STATE_NO_ESCAPE) { in may_have_side_effects()
236 if (is_bad_mod(ssa, ssa_op->op1_use, ssa_op->op1_def) in may_have_side_effects()
237 || ssa->vars[ssa_op->op1_def].escape_state != ESCAPE_STATE_NO_ESCAPE) { in may_have_side_effects()
269 zend_ssa_var *var = &ctx->ssa->vars[var_num]; in add_to_worklists()
282 zend_ssa_var *var = &ctx->ssa->vars[var_num]; in add_to_phi_worklist_no_val()
288 …erands_to_worklists(context *ctx, zend_op *opline, zend_ssa_op *ssa_op, zend_ssa *ssa, int check) { in add_operands_to_worklists() argument
295 && (ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF) != 0)) { in add_operands_to_worklists()
304 && (ssa->var_info[ssa_op->op2_use].type & MAY_BE_REF) != 0)) { in add_operands_to_worklists()
313 zend_ssa *ssa = ctx->ssa; in add_phi_sources_to_worklists() local
321 zend_ssa_var *var = &ctx->ssa->vars[var_num]; in is_var_dead()
339 zend_ssa_var *var = &ctx->ssa->vars[free_var]; in try_remove_var_def()
343 zend_ssa_op *def_op = &ctx->ssa->ops[def]; in try_remove_var_def()
395 if ((ctx->ssa->var_info[ssa_op->op1_use].type & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) != 0 in is_free_of_live_var()
396 && !may_be_refcounted(ctx->ssa->var_info[ssa_op->op1_use].type)) { in is_free_of_live_var()
409 zend_ssa *ssa = ctx->ssa; in dce_instr() local
424 if (may_be_refcounted(ssa->var_info[ssa_op->op1_use].type) in dce_instr()
433 if (may_be_refcounted(ssa->var_info[ssa_op->op2_use].type)) { in dce_instr()
445 zend_ssa_rename_defs_of_instr(ctx->ssa, ssa_op); in dce_instr()
446 zend_ssa_remove_instr(ctx->ssa, opline, ssa_op); in dce_instr()
450 opline->op1.var = EX_NUM_TO_VAR(ssa->vars[free_var].var); in dce_instr()
454 ssa_op->op1_use_chain = ssa->vars[free_var].use_chain; in dce_instr()
455 ssa->vars[free_var].use_chain = ssa_op - ssa->ops; in dce_instr()
461 static inline int get_common_phi_source(zend_ssa *ssa, zend_ssa_phi *phi) { in get_common_phi_source() argument
482 zend_ssa *ssa = ctx->ssa; in try_remove_trivial_phi() local
485 int common_source = get_common_phi_source(ssa, phi); in try_remove_trivial_phi()
487 zend_ssa_rename_var_uses(ssa, phi->ssa_var, common_source, 1); in try_remove_trivial_phi()
488 zend_ssa_remove_phi(ssa, phi); in try_remove_trivial_phi()
501 static inline bool may_break_varargs(const zend_op_array *op_array, const zend_ssa *ssa, const zend… in may_break_varargs() argument
503 && ssa->vars[ssa_op->op1_def].var < op_array->num_args) { in may_break_varargs()
507 && ssa->vars[ssa_op->op2_def].var < op_array->num_args) { in may_break_varargs()
511 && ssa->vars[ssa_op->result_def].var < op_array->num_args) { in may_break_varargs()
521 int dce_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *optimizer_ctx, zend_ssa *ssa in dce_optimize_op_array() argument
527 bool has_varargs = (ssa->cfg.flags & ZEND_FUNC_VARARG) != 0; in dce_optimize_op_array()
530 ctx.ssa = ssa; in dce_optimize_op_array()
538 ctx.phi_worklist_len = zend_bitset_len(ssa->vars_count); in dce_optimize_op_array()
552 && may_be_refcounted(ssa->var_info[phi->ssa_var].type)) { in dce_optimize_op_array()
559 int b = ssa->cfg.blocks_count; in dce_optimize_op_array()
564 zend_basic_block *block = &ssa->cfg.blocks[b]; in dce_optimize_op_array()
579 add_operands_to_worklists(&ctx, &op_array->opcodes[i], &ssa->ops[i], ssa, 0); in dce_optimize_op_array()
581 add_operands_to_worklists(&ctx, &op_array->opcodes[op_data], &ssa->ops[op_data], ssa, 0); in dce_optimize_op_array()
583 …} else if (may_have_side_effects(op_array, ssa, &op_array->opcodes[i], &ssa->ops[i], ctx.reorder_d… in dce_optimize_op_array()
584 || (zend_may_throw(&op_array->opcodes[i], &ssa->ops[i], op_array, ssa) in dce_optimize_op_array()
586 || (has_varargs && may_break_varargs(op_array, ssa, &ssa->ops[i]))) { in dce_optimize_op_array()
589 && ssa->ops[i].result_def >= 0 in dce_optimize_op_array()
590 && ssa->vars[ssa->ops[i].result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in dce_optimize_op_array()
594 add_operands_to_worklists(&ctx, &op_array->opcodes[i], &ssa->ops[i], ssa, 0); in dce_optimize_op_array()
596 add_operands_to_worklists(&ctx, &op_array->opcodes[op_data], &ssa->ops[op_data], ssa, 0); in dce_optimize_op_array()
614 add_operands_to_worklists(&ctx, &op_array->opcodes[i], &ssa->ops[i], ssa, 1); in dce_optimize_op_array()
620 add_operands_to_worklists(&ctx, &op_array->opcodes[i+1], &ssa->ops[i+1], ssa, 1); in dce_optimize_op_array()
626 add_phi_sources_to_worklists(&ctx, ssa->vars[i].definition_phi, 1); in dce_optimize_op_array()
632 removed_ops += dce_instr(&ctx, &op_array->opcodes[i], &ssa->ops[i]); in dce_optimize_op_array()
640 zend_ssa_phi *phi = ssa->vars[i].definition_phi; in dce_optimize_op_array()
651 zend_ssa_remove_uses_of_var(ssa, phi->ssa_var); in dce_optimize_op_array()
652 zend_ssa_remove_phi(ssa, phi); in dce_optimize_op_array()