Lines Matching refs:op_array

34 int zend_dfa_analyze_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa, uint…  in zend_dfa_analyze_op_array()  argument
38 if (op_array->last_try_catch) { in zend_dfa_analyze_op_array()
46 if (zend_build_cfg(&ctx->arena, op_array, in zend_dfa_analyze_op_array()
61 zend_dump_op_array(op_array, ZEND_DUMP_CFG, "dfa cfg", &ssa->cfg); in zend_dfa_analyze_op_array()
65 if (zend_cfg_compute_dominators_tree(op_array, &ssa->cfg) != SUCCESS) { in zend_dfa_analyze_op_array()
70 if (zend_cfg_identify_loops(op_array, &ssa->cfg, flags) != SUCCESS) { in zend_dfa_analyze_op_array()
75 zend_dump_dominators(op_array, &ssa->cfg); in zend_dfa_analyze_op_array()
85 if (zend_build_ssa(&ctx->arena, ctx->script, op_array, build_flags, ssa, flags) != SUCCESS) { in zend_dfa_analyze_op_array()
90 zend_dump_op_array(op_array, ZEND_DUMP_SSA, "before dfa pass", ssa); in zend_dfa_analyze_op_array()
94 if (zend_ssa_compute_use_def_chains(&ctx->arena, op_array, ssa) != SUCCESS){ in zend_dfa_analyze_op_array()
98 if (zend_ssa_find_false_dependencies(op_array, ssa) != SUCCESS) { in zend_dfa_analyze_op_array()
102 if (zend_ssa_find_sccs(op_array, ssa) != SUCCESS){ in zend_dfa_analyze_op_array()
106 if (zend_ssa_inference(&ctx->arena, op_array, ctx->script, ssa) != SUCCESS) { in zend_dfa_analyze_op_array()
111 zend_dump_ssa_variables(op_array, ssa, 0); in zend_dfa_analyze_op_array()
117 static void zend_ssa_remove_nops(zend_op_array *op_array, zend_ssa *ssa) in zend_ssa_remove_nops() argument
129 shiftlist = (uint32_t *)do_alloca(sizeof(uint32_t) * op_array->last, use_heap); in zend_ssa_remove_nops()
130 memset(shiftlist, 0, sizeof(uint32_t) * op_array->last); in zend_ssa_remove_nops()
136 ZEND_ASSERT(op_array->opcodes[b->start].opcode == ZEND_FREE in zend_ssa_remove_nops()
137 || op_array->opcodes[b->start].opcode == ZEND_FE_FREE); in zend_ssa_remove_nops()
146 if (EXPECTED(op_array->opcodes[i].opcode != ZEND_NOP) || in zend_ssa_remove_nops()
150 i + 1 < op_array->last && in zend_ssa_remove_nops()
151 (op_array->opcodes[i+1].opcode == ZEND_JMPZ || in zend_ssa_remove_nops()
152 op_array->opcodes[i+1].opcode == ZEND_JMPNZ) && in zend_ssa_remove_nops()
153 zend_is_smart_branch(op_array->opcodes + target - 1))) { in zend_ssa_remove_nops()
155 op_array->opcodes[target] = op_array->opcodes[i]; in zend_ssa_remove_nops()
167 opline = op_array->opcodes + end - 1; in zend_ssa_remove_nops()
172 new_opline = op_array->opcodes + target - 1; in zend_ssa_remove_nops()
179 …ine->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op… in zend_ssa_remove_nops()
194 …ine->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op… in zend_ssa_remove_nops()
201 …ine->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op… in zend_ssa_remove_nops()
208 if (target != op_array->last) { in zend_ssa_remove_nops()
210 for (i = target; i < op_array->last; i++) { in zend_ssa_remove_nops()
211 MAKE_NOP(op_array->opcodes + i); in zend_ssa_remove_nops()
223 for (i = 0; i < op_array->last; i++) { in zend_ssa_remove_nops()
238 zend_op *opline = op_array->opcodes + b->start + b->len - 1; in zend_ssa_remove_nops()
243 …opline->op1, ZEND_OP1_JMP_ADDR(opline) - shiftlist[ZEND_OP1_JMP_ADDR(opline) - op_array->opcodes]); in zend_ssa_remove_nops()
246 …TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - … in zend_ssa_remove_nops()
257 …opline->op2, ZEND_OP2_JMP_ADDR(opline) - shiftlist[ZEND_OP2_JMP_ADDR(opline) - op_array->opcodes]); in zend_ssa_remove_nops()
264 …TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - … in zend_ssa_remove_nops()
271 for (j = 0; j < op_array->last_live_range; j++) { in zend_ssa_remove_nops()
272 op_array->live_range[j].start -= shiftlist[op_array->live_range[j].start]; in zend_ssa_remove_nops()
273 op_array->live_range[j].end -= shiftlist[op_array->live_range[j].end]; in zend_ssa_remove_nops()
277 for (j = 0; j < op_array->last_try_catch; j++) { in zend_ssa_remove_nops()
278 op_array->try_catch_array[j].try_op -= shiftlist[op_array->try_catch_array[j].try_op]; in zend_ssa_remove_nops()
279 op_array->try_catch_array[j].catch_op -= shiftlist[op_array->try_catch_array[j].catch_op]; in zend_ssa_remove_nops()
280 if (op_array->try_catch_array[j].finally_op) { in zend_ssa_remove_nops()
281 op_array->try_catch_array[j].finally_op -= shiftlist[op_array->try_catch_array[j].finally_op]; in zend_ssa_remove_nops()
282 op_array->try_catch_array[j].finally_end -= shiftlist[op_array->try_catch_array[j].finally_end]; in zend_ssa_remove_nops()
287 if (op_array->early_binding != (uint32_t)-1) { in zend_ssa_remove_nops()
288 uint32_t *opline_num = &op_array->early_binding; in zend_ssa_remove_nops()
292 opline_num = &ZEND_RESULT(&op_array->opcodes[*opline_num]).opline_num; in zend_ssa_remove_nops()
297 func_info = ZEND_FUNC_INFO(op_array); in zend_ssa_remove_nops()
302 shiftlist[call_info->caller_init_opline - op_array->opcodes]; in zend_ssa_remove_nops()
304 shiftlist[call_info->caller_call_opline - op_array->opcodes]; in zend_ssa_remove_nops()
309 op_array->last = target; in zend_ssa_remove_nops()
315 zend_op_array *op_array, zend_ssa *ssa, zend_ssa_op *ssa_op) { in can_elide_return_type_check() argument
316 zend_arg_info *info = &op_array->arg_info[-1]; in can_elide_return_type_check()
380 void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa) in zend_dfa_optimize_op_array() argument
383 zend_dump_op_array(op_array, ZEND_DUMP_SSA, "before dfa pass", ssa); in zend_dfa_optimize_op_array()
393 for (v = op_array->last_var; v < ssa->vars_count; v++) { in zend_dfa_optimize_op_array()
401 opline = op_array->opcodes + op_1; in zend_dfa_optimize_op_array()
413 zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); in zend_dfa_optimize_op_array()
416 opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
424 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_op_array()
427 opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
443 && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op1.constant)) == IS_LONG in zend_dfa_optimize_op_array()
448 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_op_array()
450 opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
455 && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
460 zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); in zend_dfa_optimize_op_array()
462 opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
467 if (ssa->vars[v].var >= op_array->last_var) { in zend_dfa_optimize_op_array()
495 ssa, &op_array->opcodes[ssa->vars[src_var].definition], in zend_dfa_optimize_op_array()
518 op_array->opcodes[op_2].result_type = opline->op1_type; in zend_dfa_optimize_op_array()
519 op_array->opcodes[op_2].result.var = opline->op1.var; in zend_dfa_optimize_op_array()
556 && Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
557 && Z_LVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == 1 in zend_dfa_optimize_op_array()
570 && Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
571 && Z_LVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == 1 in zend_dfa_optimize_op_array()
585 && can_elide_return_type_check(op_array, ssa, &ssa->ops[op_1])) { in zend_dfa_optimize_op_array()
639 zend_ssa_remove_nops(op_array, ssa); in zend_dfa_optimize_op_array()
644 zend_dump_op_array(op_array, ZEND_DUMP_SSA, "after dfa pass", ssa); in zend_dfa_optimize_op_array()
648 void zend_optimize_dfa(zend_op_array *op_array, zend_optimizer_ctx *ctx) in zend_optimize_dfa() argument
654 if (zend_dfa_analyze_op_array(op_array, ctx, &ssa, &flags) != SUCCESS) { in zend_optimize_dfa()
659 zend_dfa_optimize_op_array(op_array, ctx, &ssa); in zend_optimize_dfa()