/PHP-8.3/Zend/Optimizer/ |
H A D | dfa_pass.c | 163 ssa->ops[target] = ssa->ops[i]; in zend_ssa_remove_nops() 205 ssa->vars[j].use_chain -= shiftlist[ssa->vars[j].use_chain]; in zend_ssa_remove_nops() 363 && zend_may_throw(opline, &ssa->ops[ssa->vars[src_var].definition], op_array, ssa)) { in opline_supports_assign_contraction() 1214 ssa->ops[op_1].op1_use = ssa->ops[op_1].op2_use; in zend_dfa_optimize_op_array() 1234 ssa->ops[op_1].op1_use = ssa->ops[op_1].op2_use; in zend_dfa_optimize_op_array() 1279 ssa->ops[op_1].op2_use = ssa->ops[op_1].op1_use; in zend_dfa_optimize_op_array() 1446 ssa->ops[op_2].op1_use = ssa->ops[op_2].op2_use; in zend_dfa_optimize_op_array() 1600 ssa->ops[op_2].op1_use = ssa->ops[op_2].op2_use; in zend_dfa_optimize_op_array() 1622 ssa->ops[op_1].op1_use = ssa->ops[op_1].op2_use; in zend_dfa_optimize_op_array() 1678 ssa->ops[op_1].result_def = ssa->ops[op_1].op1_def; in zend_dfa_optimize_op_array() [all …]
|
H A D | zend_inference.h | 47 ssa->var_info && \ 49 ssa->var_info[ssa_op->opN##_use].has_range); \ 63 ssa->var_info && \ 65 ssa->var_info[ssa_op->opN##_use].has_range) { \ 80 ssa->var_info && \ 97 ssa->var_info && \ 114 ssa->var_info && \ 167 if (ssa->var_info && ssa_var_num >= 0) { in get_ssa_var_info() 168 return ssa->var_info[ssa_var_num].type; in get_ssa_var_info() 180 return get_ssa_var_info(ssa, ssa->var_info ? ssa_op->opN##_use : -1); \ [all …]
|
H A D | dce.c | 50 zend_ssa *ssa; member 313 zend_ssa *ssa = ctx->ssa; in add_phi_sources_to_worklists() local 409 zend_ssa *ssa = ctx->ssa; in dce_instr() local 455 ssa->vars[free_var].use_chain = ssa_op - ssa->ops; in dce_instr() 482 zend_ssa *ssa = ctx->ssa; in try_remove_trivial_phi() local 530 ctx.ssa = ssa; 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() 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() 594 add_operands_to_worklists(&ctx, &op_array->opcodes[i], &ssa->ops[i], ssa, 0); in dce_optimize_op_array() [all …]
|
H A D | scdf.c | 84 scdf->ssa = ssa; in scdf_init() 104 zend_ssa *ssa = scdf->ssa; in scdf_solve() local 120 int block_num = ssa->cfg.map[i]; in scdf_solve() 124 zend_ssa_op *ssa_op = &ssa->ops[i]; in scdf_solve() 210 const zend_cfg *cfg = &scdf->ssa->cfg; in kept_alive_by_loop_var_free() 224 zend_ssa *ssa = scdf->ssa; in cleanup_loop_var_free_block() local 226 const zend_cfg *cfg = &ssa->cfg; in cleanup_loop_var_free_block() 233 zend_ssa_remove_phi(ssa, phi); in cleanup_loop_var_free_block() 238 zend_ssa_op *ssa_op = &scdf->ssa->ops[i]; in cleanup_loop_var_free_block() 246 zend_ssa_remove_defs_of_instr(ssa, ssa_op); in cleanup_loop_var_free_block() [all …]
|
H A D | ssa_integrity.c | 26 FOREACH_USE(&ssa->vars[var], use) { in is_in_use_chain() 110 (ssa->vars[i].var < op_array->last_var ? ZSTR_VAL(op_array->vars[ssa->vars[i].var]) : "") 117 zend_cfg *cfg = &ssa->cfg; in ssa_verify_integrity() 155 use = zend_ssa_next_use(ssa->ops, var - ssa->vars, use); in ssa_verify_integrity() 156 second_use = zend_ssa_next_use(ssa->ops, var - ssa->vars, second_use); in ssa_verify_integrity() 160 second_use = zend_ssa_next_use(ssa->ops, var - ssa->vars, second_use); in ssa_verify_integrity() 177 phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, phi); in ssa_verify_integrity() 178 second_phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, second_phi); in ssa_verify_integrity() 182 second_phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, second_phi); in ssa_verify_integrity() 341 if (ssa->vars[source].var != ssa->vars[phi->ssa_var].var) { in ssa_verify_integrity() [all …]
|
H A D | zend_ssa.h | 179 zend_ssa_var *var = &ssa->vars[ssa_op->op1_def]; in zend_ssa_remove_op1_def() 186 zend_ssa_var *var = &ssa->vars[ssa_op->op2_def]; in zend_ssa_remove_op2_def() 245 ssa->vars[ssa_op->op1_def].definition = -1; in zend_ssa_rename_defs_of_instr() 252 ssa->vars[ssa_op->op2_def].definition = -1; in zend_ssa_rename_defs_of_instr() 259 ssa->vars[ssa_op->result_def].definition = -1; in zend_ssa_rename_defs_of_instr() 270 int _var_num = (var) - ssa->vars, next; \ 278 int _var_num = (var) - ssa->vars; \ 298 for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \ 299 phi = ssa->blocks[_i].phis; \ 308 for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \ [all …]
|
H A D | zend_ssa.c | 1060 if (!ssa->vars) { in zend_ssa_compute_use_def_chains() 1176 ssa->vars[var].use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain() 1184 ssa->ops[use].res_use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain() 1191 ssa->ops[use].op1_use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain() 1261 zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use); in zend_ssa_remove_instr() 1269 zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op2_use); in zend_ssa_remove_instr() 1493 zend_ssa_remove_defs_of_instr(ssa, &ssa->ops[j]); in zend_ssa_remove_block() 1494 zend_ssa_remove_instr(ssa, &op_array->opcodes[j], &ssa->ops[j]); in zend_ssa_remove_block() 1558 if (ssa->var_info[var].type & ~ssa->var_info[phi->ssa_var].type) { in propagate_phi_type_widening() 1559 ssa->var_info[phi->ssa_var].type |= ssa->var_info[var].type; in propagate_phi_type_widening() [all …]
|
H A D | zend_inference.c | 207 ssa->vars[var2].scc = ssa->sccs; 210 ssa->vars[var].scc = ssa->sccs; 229 ssa->sccs = ssa->vars_count; 240 ssa->vars[j].scc -= ssa->sccs; 244 ssa->sccs = ssa->vars_count - ssa->sccs; 431 ssa->vars[var2].scc = ssa->sccs; in zend_ssa_check_scc_var() 434 ssa->vars[var].scc = ssa->sccs; in zend_ssa_check_scc_var() 458 ssa->sccs = ssa->vars_count; in zend_ssa_find_sccs() 469 ssa->vars[j].scc -= ssa->sccs; in zend_ssa_find_sccs() 473 ssa->sccs = ssa->vars_count - ssa->sccs; in zend_ssa_find_sccs() [all …]
|
H A D | zend_func_info.c | 52 static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa *ssa) in zend_range_info() argument 56 && ssa in zend_range_info() 57 && !(ssa->cfg.flags & ZEND_SSA_TSSA)) { in zend_range_info() 59 uint32_t t1 = _ssa_op1_info(op_array, ssa, call_info->arg_info[0].opline, in zend_range_info() 60 &ssa->ops[call_info->arg_info[0].opline - op_array->opcodes]); in zend_range_info() 61 uint32_t t2 = _ssa_op1_info(op_array, ssa, call_info->arg_info[1].opline, in zend_range_info() 62 &ssa->ops[call_info->arg_info[1].opline - op_array->opcodes]); in zend_range_info() 67 t3 = _ssa_op1_info(op_array, ssa, call_info->arg_info[2].opline, in zend_range_info() 68 &ssa->ops[call_info->arg_info[2].opline - op_array->opcodes]); in zend_range_info() 119 return call_info ? info->info_func(call_info, ssa) : 0; in zend_get_internal_func_info() [all …]
|
H A D | escape_analysis.c | 78 zend_ssa_var *ssa_vars = ssa->vars; in zend_build_equi_escape_sets() 79 int ssa_vars_count = ssa->vars_count; in zend_build_equi_escape_sets() 103 zend_ssa_op *op = ssa->ops + def; in zend_build_equi_escape_sets() 152 zend_ssa_op *ssa_op = ssa->ops + def; in is_allocation_def() 223 zend_ssa_op *op = ssa->ops + def; in is_local_def() 273 zend_ssa_op *ssa_op = ssa->ops + use; in is_escape_use() 384 zend_ssa_var *ssa_vars = ssa->vars; in zend_ssa_escape_analysis() 385 int ssa_vars_count = ssa->vars_count; in zend_ssa_escape_analysis() 399 && (ssa->var_info[i].type & (MAY_BE_ARRAY|MAY_BE_OBJECT)) in zend_ssa_escape_analysis() 454 if (is_escape_use(op_array, ssa, use, i)) { in zend_ssa_escape_analysis() [all …]
|
H A D | scdf.h | 26 zend_ssa *ssa; member 49 void scdf_init(zend_optimizer_ctx *ctx, scdf_ctx *scdf, zend_op_array *op_array, zend_ssa *ssa); 56 const zend_ssa *ssa = scdf->ssa; in scdf_add_to_worklist() local 57 const zend_ssa_var *var = &ssa->vars[var_num]; in scdf_add_to_worklist() 70 const zend_ssa_var *var = &scdf->ssa->vars[var_num]; in scdf_add_def_to_worklist() 93 uint32_t edge = scdf_edge(&scdf->ssa->cfg, from, to); in scdf_is_edge_feasible()
|
H A D | zend_dump.c | 385 if (ssa->var_info) { in zend_dump_ssa_var() 757 const zend_ssa *ssa = NULL; in zend_dump_op_line() local 768 ssa = (const zend_ssa*)data; in zend_dump_op_line() 769 if (ssa && ssa->ops) { in zend_dump_op_line() 879 if (ssa && ssa->blocks && ssa->blocks[n].phis) { in zend_dump_block_header() 929 const zend_ssa *ssa = NULL; in zend_dump_op_array() local 940 ssa = (const zend_ssa*)data; in zend_dump_op_array() 954 if (ssa) { in zend_dump_op_array() 1012 if (ssa && ssa->var_info) { in zend_dump_op_array() 1192 if (ssa->vars) { in zend_dump_ssa_variables() [all …]
|
H A D | zend_dump.h | 37 …asic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op … 41 void zend_dump_phi_placement(const zend_op_array *op_array, const zend_ssa *ssa); 43 void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t dump_flag… 44 ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num…
|
H A D | sccp.c | 1723 zend_ssa *ssa = ctx->scdf.ssa; in value_from_type_and_range() local 1737 if (ssa->vars[var_num].definition >= 0 in value_from_type_and_range() 1868 zend_ssa *ssa = scdf->ssa; in sccp_mark_feasible_successors() local 1884 zend_ssa *ssa = scdf->ssa; in sccp_mark_feasible_successors() local 1991 zend_ssa *ssa = scdf->ssa; in sccp_visit_phi() local 2036 zend_ssa *ssa = ctx->scdf.ssa; in remove_call() local 2075 zend_ssa *ssa = ctx->scdf.ssa; in try_remove_definition() local 2311 zend_ssa *ssa = ctx->scdf.ssa; in replace_constant_operands() local 2320 zend_ssa_var *var = &ssa->vars[i]; in replace_constant_operands() 2392 for (; i < ssa->vars_count; ++i) { in sccp_context_init() [all …]
|
H A D | zend_func_info.h | 60 const zend_function *callee_func, const zend_call_info *call_info, const zend_ssa *ssa); 62 const zend_call_info *call_info, const zend_ssa *ssa,
|
H A D | zend_optimizer_internal.h | 114 …_result zend_dfa_analyze_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa); 115 void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa, ze… 125 int sccp_optimize_op_array(zend_optimizer_ctx *ctx, zend_op_array *op_array, zend_ssa *ssa, zend_ca… 126 int dce_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *optimizer_ctx, zend_ssa *ssa… 127 …result zend_ssa_escape_analysis(const zend_script *script, zend_op_array *op_array, zend_ssa *ssa);
|
H A D | zend_call_graph.h | 48 zend_ssa ssa; /* Static Single Assignment Form */ member
|
H A D | zend_optimizer.c | 1216 static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa) in zend_redo_pass_two_ex() argument 1245 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_redo_pass_two_ex() 1395 zend_ssa_op *ssa_op = &func_info->ssa.ops[def_opline - op_array->opcodes]; in needs_live_range() 1405 if (func_info->ssa.vars[ssa_var].phi_use_chain) { in needs_live_range() 1406 ssa_var = func_info->ssa.vars[ssa_var].phi_use_chain->ssa_var; in needs_live_range() 1409 uint32_t type = func_info->ssa.var_info[ssa_var].type; in needs_live_range() 1512 if (zend_dfa_analyze_op_array(call_graph.op_arrays[i], &ctx, &func_info->ssa) == SUCCESS) { in zend_optimize_script() 1513 func_info->flags = func_info->ssa.cfg.flags; in zend_optimize_script() 1524 zend_dfa_optimize_op_array(call_graph.op_arrays[i], &ctx, &func_info->ssa, func_info->call_map); in zend_optimize_script() 1570 if (func_info && func_info->ssa.var_info) { in zend_optimize_script() [all …]
|
/PHP-8.3/ext/opcache/jit/ |
H A D | zend_jit.c | 545 if (ssa->vars && ssa->var_info) { in zend_ssa_cv_info() 933 if (rt_opline && ssa && ssa->cfg.map) { in dasm_link_and_encode() 1073 ssa ? &ssa->cfg : NULL, in dasm_link_and_encode() 1139 if (!ssa->ops || !ssa->var_info) { in zend_may_overflow() 3203 if (ssa->var_info && ssa->ops) { in zend_jit() 3251 if (ssa->var_info && ssa->ops) { in zend_jit() 3292 if (ssa->var_info && ssa->ops) { in zend_jit() 3794 if (ssa->var_info && ssa->ops) { in zend_jit() 3813 if (!ssa->ops || !ssa->var_info) { in zend_jit() 3945 if (ssa->var_info && ssa->ops) { in zend_jit() [all …]
|
H A D | zend_jit_trace.c | 568 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_ssa() 1284 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 1302 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 1525 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 2320 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 2391 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 2543 ssa = &jit_extension->func_info.ssa; in zend_jit_trace_build_tssa() 3616 if (ssa && ssa->vars[i].no_val) { in zend_jit_trace_deoptimization() 3651 if (ssa && ssa->vars[i].no_val) { in zend_jit_trace_deoptimization() 4693 if (ssa->var_info && ssa->ops) { in zend_jit_trace() [all …]
|
H A D | zend_jit_x86.dasc | 15907 …if ((ssa->var_info[def_var].type & ~MAY_BE_GUARD) != (ssa->var_info[use_var].type & ~MAY_BE_GUARD)… 15999 if (!ssa->cfg.map) { 16002 … if (opline > op_array->opcodes + ssa->cfg.blocks[ssa->cfg.map[opline-op_array->opcodes]].start && 16034 if (ssa->vars[var].no_val) { 16046 if (ssa->vars[var].phi_use_chain) { 16074 if (!zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + def, ssa->ops + def, NULL)) { 16084 … !zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + use, ssa->ops + use, NULL)) { 16437 if (ssa_op == ssa->ops 16447 if (ssa_op == ssa->ops 16459 uint32_t b = ssa->cfg.map[ssa_op - ssa->ops]; [all …]
|
H A D | zend_jit_arm64.dasc | 14962 …if ((ssa->var_info[def_var].type & ~MAY_BE_GUARD) != (ssa->var_info[use_var].type & ~MAY_BE_GUARD)… 15056 if (!ssa->cfg.map) { 15059 … if (opline > op_array->opcodes + ssa->cfg.blocks[ssa->cfg.map[opline-op_array->opcodes]].start && 15091 if (ssa->vars[var].no_val) { 15100 if (ssa->vars[var].definition_phi) { 15103 if (ssa->vars[var].phi_use_chain) { 15131 if (!zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + def, ssa->ops + def, NULL)) { 15136 if (ssa->vars[var].use_chain >= 0) { 15137 int use = ssa->vars[var].use_chain; 15141 … !zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + use, ssa->ops + use, NULL)) { [all …]
|
H A D | zend_jit_internal.h | 157 zend_ival_is_last_use(ra[ssa_op->op], ssa_op - ssa->ops) \
|
/PHP-8.3/ext/opcache/tests/opt/ |
H A D | nullsafe_002.phpt | 2 Nullsafe e-ssa pi node placement
|