Lines Matching refs:op_array

215 void zend_optimizer_convert_to_free_op1(zend_op_array *op_array, zend_op *opline)  in zend_optimizer_convert_to_free_op1()  argument
234 int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv) in zend_optimizer_add_literal() argument
236 int i = op_array->last_literal; in zend_optimizer_add_literal()
237 op_array->last_literal++; in zend_optimizer_add_literal()
238 op_array->literals = (zval*)erealloc(op_array->literals, op_array->last_literal * sizeof(zval)); in zend_optimizer_add_literal()
239 ZVAL_COPY_VALUE(&op_array->literals[i], zv); in zend_optimizer_add_literal()
240 Z_EXTRA(op_array->literals[i]) = 0; in zend_optimizer_add_literal()
244 static inline int zend_optimizer_add_literal_string(zend_op_array *op_array, zend_string *str) { in zend_optimizer_add_literal_string() argument
248 return zend_optimizer_add_literal(op_array, &zv); in zend_optimizer_add_literal_string()
259 static inline uint32_t alloc_cache_slots(zend_op_array *op_array, uint32_t num) { in alloc_cache_slots() argument
260 uint32_t ret = op_array->cache_size; in alloc_cache_slots()
261 op_array->cache_size += num * sizeof(void *); in alloc_cache_slots()
278 bool zend_optimizer_update_op1_const(zend_op_array *op_array, in zend_optimizer_update_op1_const() argument
289 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
314 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
315 …opline->extended_value = alloc_cache_slots(op_array, 1) | (opline->extended_value & ZEND_LAST_CATC… in zend_optimizer_update_op1_const()
316 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op1_const()
321 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
322 opline->extended_value = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op1_const()
323 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op1_const()
328 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
329 opline->op2.num = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op1_const()
330 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op1_const()
335 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
337 opline->result.num = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op1_const()
339 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op1_const()
344 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
346 opline->extended_value = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op1_const()
348 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op1_const()
370 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
371 …ONST && (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*) == op_array->cache_size) { in zend_optimizer_update_op1_const()
372 op_array->cache_size += sizeof(void *); in zend_optimizer_update_op1_const()
374 …opline->extended_value = alloc_cache_slots(op_array, 3) | (opline->extended_value & ZEND_FETCH_OBJ… in zend_optimizer_update_op1_const()
379 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
383 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
387 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
403 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
428 opline->op1.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op1_const()
439 bool zend_optimizer_update_op2_const(zend_op_array *op_array, in zend_optimizer_update_op2_const() argument
453 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
454 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
455 opline->extended_value = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op2_const()
460 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
461 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
462 opline->result.num = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op2_const()
481 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
482 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
484 …opline->extended_value = alloc_cache_slots(op_array, 1) | (opline->extended_value & (ZEND_RETURNS_… in zend_optimizer_update_op2_const()
496 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
497 opline->result.num = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op2_const()
513 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
514 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
515 opline->result.num = alloc_cache_slots(op_array, 1); in zend_optimizer_update_op2_const()
517 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
522 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
523 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
524 opline->result.num = alloc_cache_slots(op_array, 2); in zend_optimizer_update_op2_const()
528 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
529 zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); in zend_optimizer_update_op2_const()
531 opline->result.num = alloc_cache_slots(op_array, 2); in zend_optimizer_update_op2_const()
548 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
549 opline->extended_value = alloc_cache_slots(op_array, 3); in zend_optimizer_update_op2_const()
553 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
555 (opline + 1)->extended_value = alloc_cache_slots(op_array, 3); in zend_optimizer_update_op2_const()
559 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
560 … opline->extended_value = alloc_cache_slots(op_array, 3) | (opline->extended_value & ZEND_ISEMPTY); in zend_optimizer_update_op2_const()
579 opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_optimizer_update_op2_const()
581 zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
582 Z_EXTRA(op_array->literals[opline->op2.constant]) = ZEND_EXTRA_VALUE; in zend_optimizer_update_op2_const()
586 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
597 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
610 opline->op2.constant = zend_optimizer_add_literal(op_array, val); in zend_optimizer_update_op2_const()
621 bool zend_optimizer_replace_by_const(zend_op_array *op_array, in zend_optimizer_replace_by_const() argument
627 zend_op *end = op_array->opcodes + op_array->last; in zend_optimizer_replace_by_const()
645 zend_op *end = op_array->opcodes + op_array->last; in zend_optimizer_replace_by_const()
661 if (!zend_optimizer_update_op1_const(op_array, opline, val)) { in zend_optimizer_replace_by_const()
675 zend_arg_info *ret_info = op_array->arg_info - 1; in zend_optimizer_replace_by_const()
677 || (op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE)) { in zend_optimizer_replace_by_const()
693 return zend_optimizer_update_op1_const(op_array, opline, val); in zend_optimizer_replace_by_const()
698 return zend_optimizer_update_op2_const(op_array, opline, val); in zend_optimizer_replace_by_const()
707 void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_opline, zend_op *opline) { in zend_optimizer_migrate_jump() argument
729 …ine->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op… in zend_optimizer_migrate_jump()
743 …Z_LVAL_P(zv) = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array,… in zend_optimizer_migrate_jump()
745 …ine->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op… in zend_optimizer_migrate_jump()
752 void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_t *shiftlist) { in zend_optimizer_shift_jump() argument
756 …opline->op1, ZEND_OP1_JMP_ADDR(opline) - shiftlist[ZEND_OP1_JMP_ADDR(opline) - op_array->opcodes]); in zend_optimizer_shift_jump()
770 …opline->op2, ZEND_OP2_JMP_ADDR(opline) - shiftlist[ZEND_OP2_JMP_ADDR(opline) - op_array->opcodes]); in zend_optimizer_shift_jump()
774 …opline->op2, ZEND_OP2_JMP_ADDR(opline) - shiftlist[ZEND_OP2_JMP_ADDR(opline) - op_array->opcodes]); in zend_optimizer_shift_jump()
779 …TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - … in zend_optimizer_shift_jump()
788 …_NUM_TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv)) - shift… in zend_optimizer_shift_jump()
790 …TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - … in zend_optimizer_shift_jump()
797 const zend_script *script, const zend_op_array *op_array, zend_string *lcname) { in zend_optimizer_get_class_entry() argument
806 || (op_array && ce->info.user.filename == op_array->filename))) { in zend_optimizer_get_class_entry()
810 if (op_array && op_array->scope && zend_string_equals_ci(op_array->scope->name, lcname)) { in zend_optimizer_get_class_entry()
811 return op_array->scope; in zend_optimizer_get_class_entry()
818 const zend_script *script, const zend_op_array *op_array, const zend_op *opline) { in zend_optimizer_get_class_entry_from_op1() argument
822 return zend_optimizer_get_class_entry(script, op_array, Z_STR_P(op1 + 1)); in zend_optimizer_get_class_entry_from_op1()
824 } else if (opline->op1_type == IS_UNUSED && op_array->scope in zend_optimizer_get_class_entry_from_op1()
825 && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT) in zend_optimizer_get_class_entry_from_op1()
828 && (op_array->scope->ce_flags & ZEND_ACC_FINAL)))) { in zend_optimizer_get_class_entry_from_op1()
829 return op_array->scope; in zend_optimizer_get_class_entry_from_op1()
835 …const zend_script *script, const zend_op_array *op_array, const zend_op *opline, bool *is_prototyp… in zend_fetch_class_const_info() argument
839 …if (!opline || !op_array || opline->op2_type != IS_CONST || Z_TYPE_P(CRT_CONSTANT(opline->op2)) !=… in zend_fetch_class_const_info()
846 ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(op1 + 1)); in zend_fetch_class_const_info()
854 && tmp->info.user.filename == op_array->filename) { in zend_fetch_class_const_info()
861 && op_array->scope && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT) in zend_fetch_class_const_info()
862 && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in zend_fetch_class_const_info()
865 ce = op_array->scope; in zend_fetch_class_const_info()
867 ce = op_array->scope; in zend_fetch_class_const_info()
870 if (op_array->scope->ce_flags & ZEND_ACC_LINKED) { in zend_fetch_class_const_info()
871 ce = op_array->scope->parent; in zend_fetch_class_const_info()
883 …_FLAGS(const_info) & ZEND_ACC_PPP_MASK) != ZEND_ACC_PUBLIC && const_info->ce != op_array->scope)) { in zend_fetch_class_const_info()
893 zend_script *script, zend_op_array *op_array, zend_op *opline, bool *is_prototype) in zend_optimizer_get_called_func() argument
907 func->op_array.filename && in zend_optimizer_get_called_func()
908 func->op_array.filename == op_array->filename) { in zend_optimizer_get_called_func()
925 func->op_array.filename && in zend_optimizer_get_called_func()
926 func->op_array.filename == op_array->filename) { in zend_optimizer_get_called_func()
935 script, op_array, opline); in zend_optimizer_get_called_func()
941 bool same_scope = fbc->common.scope == op_array->scope; in zend_optimizer_get_called_func()
952 && op_array->scope in zend_optimizer_get_called_func()
953 && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) in zend_optimizer_get_called_func()
954 && !(op_array->scope->ce_flags & ZEND_ACC_TRAIT)) { in zend_optimizer_get_called_func()
957 &op_array->scope->function_table, method_name); in zend_optimizer_get_called_func()
963 bool same_scope = fbc->common.scope == op_array->scope; in zend_optimizer_get_called_func()
980 script, op_array, opline); in zend_optimizer_get_called_func()
1010 zend_op *zend_optimizer_get_loop_var_def(const zend_op_array *op_array, zend_op *free_opline) { in zend_optimizer_get_loop_var_def() argument
1014 while (--free_opline >= op_array->opcodes) { in zend_optimizer_get_loop_var_def()
1022 static void zend_optimize(zend_op_array *op_array, in zend_optimize() argument
1025 if (op_array->type == ZEND_EVAL_CODE) { in zend_optimize()
1030 zend_dump_op_array(op_array, ZEND_DUMP_LIVE_RANGES, "before optimizer", NULL); in zend_optimize()
1042 zend_optimizer_pass1(op_array, ctx); in zend_optimize()
1044 zend_dump_op_array(op_array, 0, "after pass 1", NULL); in zend_optimize()
1052 zend_optimizer_pass3(op_array, ctx); in zend_optimize()
1054 zend_dump_op_array(op_array, 0, "after pass 3", NULL); in zend_optimize()
1062 zend_optimize_func_calls(op_array, ctx); in zend_optimize()
1064 zend_dump_op_array(op_array, 0, "after pass 4", NULL); in zend_optimize()
1072 zend_optimize_cfg(op_array, ctx); in zend_optimize()
1074 zend_dump_op_array(op_array, 0, "after pass 5", NULL); in zend_optimize()
1083 zend_optimize_dfa(op_array, ctx); in zend_optimize()
1085 zend_dump_op_array(op_array, 0, "after pass 6", NULL); in zend_optimize()
1094 zend_optimize_temporary_variables(op_array, ctx); in zend_optimize()
1096 zend_dump_op_array(op_array, 0, "after pass 9", NULL); in zend_optimize()
1104 zend_optimizer_nop_removal(op_array, ctx); in zend_optimize()
1106 zend_dump_op_array(op_array, 0, "after pass 10", NULL); in zend_optimize()
1116 zend_optimizer_compact_literals(op_array, ctx); in zend_optimize()
1118 zend_dump_op_array(op_array, 0, "after pass 11", NULL); in zend_optimize()
1125 zend_optimizer_compact_vars(op_array); in zend_optimize()
1127 zend_dump_op_array(op_array, 0, "after pass 13", NULL); in zend_optimize()
1136 zend_dump_op_array(op_array, 0, "after optimizer", NULL); in zend_optimize()
1140 static void zend_revert_pass_two(zend_op_array *op_array) in zend_revert_pass_two() argument
1144 ZEND_ASSERT((op_array->fn_flags & ZEND_ACC_DONE_PASS_TWO) != 0); in zend_revert_pass_two()
1146 opline = op_array->opcodes; in zend_revert_pass_two()
1147 end = opline + op_array->last; in zend_revert_pass_two()
1150 ZEND_PASS_TWO_UNDO_CONSTANT(op_array, opline, opline->op1); in zend_revert_pass_two()
1153 ZEND_PASS_TWO_UNDO_CONSTANT(op_array, opline, opline->op2); in zend_revert_pass_two()
1160 if (op_array->literals) { in zend_revert_pass_two()
1161 zval *literals = emalloc(sizeof(zval) * op_array->last_literal); in zend_revert_pass_two()
1162 memcpy(literals, op_array->literals, sizeof(zval) * op_array->last_literal); in zend_revert_pass_two()
1163 op_array->literals = literals; in zend_revert_pass_two()
1167 op_array->T -= ZEND_OBSERVER_ENABLED; in zend_revert_pass_two()
1169 op_array->fn_flags &= ~ZEND_ACC_DONE_PASS_TWO; in zend_revert_pass_two()
1172 static void zend_redo_pass_two(zend_op_array *op_array) in zend_redo_pass_two() argument
1176 zend_op *old_opcodes = op_array->opcodes; in zend_redo_pass_two()
1179 ZEND_ASSERT((op_array->fn_flags & ZEND_ACC_DONE_PASS_TWO) == 0); in zend_redo_pass_two()
1182 if (op_array->last_literal) { in zend_redo_pass_two()
1183 op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, in zend_redo_pass_two()
1184 ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) * op_array->last, 16) + in zend_redo_pass_two()
1185 sizeof(zval) * op_array->last_literal); in zend_redo_pass_two()
1186 memcpy(((char*)op_array->opcodes) + ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) * op_array->last, 16), in zend_redo_pass_two()
1187 op_array->literals, sizeof(zval) * op_array->last_literal); in zend_redo_pass_two()
1188 efree(op_array->literals); in zend_redo_pass_two()
1189op_array->literals = (zval*)(((char*)op_array->opcodes) + ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) … in zend_redo_pass_two()
1191 if (op_array->literals) { in zend_redo_pass_two()
1192 efree(op_array->literals); in zend_redo_pass_two()
1194 op_array->literals = NULL; in zend_redo_pass_two()
1198 op_array->T += ZEND_OBSERVER_ENABLED; // reserve last temporary for observers if enabled in zend_redo_pass_two()
1200 opline = op_array->opcodes; in zend_redo_pass_two()
1201 end = opline + op_array->last; in zend_redo_pass_two()
1204 ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, opline->op1); in zend_redo_pass_two()
1207 ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, opline->op2); in zend_redo_pass_two()
1214 opline->op1.jmp_addr = &op_array->opcodes[opline->op1.jmp_addr - old_opcodes]; in zend_redo_pass_two()
1228 opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes]; in zend_redo_pass_two()
1232 opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes]; in zend_redo_pass_two()
1281 op_array->fn_flags |= ZEND_ACC_DONE_PASS_TWO; in zend_redo_pass_two()
1284 static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa) in zend_redo_pass_two_ex() argument
1288 zend_op *old_opcodes = op_array->opcodes; in zend_redo_pass_two_ex()
1291 ZEND_ASSERT((op_array->fn_flags & ZEND_ACC_DONE_PASS_TWO) == 0); in zend_redo_pass_two_ex()
1294 if (op_array->last_literal) { in zend_redo_pass_two_ex()
1295 op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, in zend_redo_pass_two_ex()
1296 ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) * op_array->last, 16) + in zend_redo_pass_two_ex()
1297 sizeof(zval) * op_array->last_literal); in zend_redo_pass_two_ex()
1298 memcpy(((char*)op_array->opcodes) + ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) * op_array->last, 16), in zend_redo_pass_two_ex()
1299 op_array->literals, sizeof(zval) * op_array->last_literal); in zend_redo_pass_two_ex()
1300 efree(op_array->literals); in zend_redo_pass_two_ex()
1301op_array->literals = (zval*)(((char*)op_array->opcodes) + ZEND_MM_ALIGNED_SIZE_EX(sizeof(zend_op) … in zend_redo_pass_two_ex()
1303 if (op_array->literals) { in zend_redo_pass_two_ex()
1304 efree(op_array->literals); in zend_redo_pass_two_ex()
1306 op_array->literals = NULL; in zend_redo_pass_two_ex()
1310 opline = op_array->opcodes; in zend_redo_pass_two_ex()
1311 end = opline + op_array->last; in zend_redo_pass_two_ex()
1313 zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; in zend_redo_pass_two_ex()
1321 …((ssa->ops[opline - op_array->opcodes].op1_def >= 0) ? (OP1_DEF_INFO() & (MAY_BE_UNDEF|MAY_BE_ANY|… in zend_redo_pass_two_ex()
1325 ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, opline->op1); in zend_redo_pass_two_ex()
1328 ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, opline->op2); in zend_redo_pass_two_ex()
1336 opline->op1.jmp_addr = &op_array->opcodes[opline->op1.jmp_addr - old_opcodes]; in zend_redo_pass_two_ex()
1350 opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes]; in zend_redo_pass_two_ex()
1354 opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes]; in zend_redo_pass_two_ex()
1423 op_array->fn_flags |= ZEND_ACC_DONE_PASS_TWO; in zend_redo_pass_two_ex()
1426 static void zend_optimize_op_array(zend_op_array *op_array, in zend_optimize_op_array() argument
1430 zend_revert_pass_two(op_array); in zend_optimize_op_array()
1433 zend_optimize(op_array, ctx); in zend_optimize_op_array()
1436 zend_redo_pass_two(op_array); in zend_optimize_op_array()
1438 if (op_array->live_range) { in zend_optimize_op_array()
1439 zend_recalc_live_ranges(op_array, NULL); in zend_optimize_op_array()
1443 static void zend_adjust_fcall_stack_size(zend_op_array *op_array, zend_optimizer_ctx *ctx) in zend_adjust_fcall_stack_size() argument
1448 opline = op_array->opcodes; in zend_adjust_fcall_stack_size()
1449 end = opline + op_array->last; in zend_adjust_fcall_stack_size()
1463 static void zend_adjust_fcall_stack_size_graph(zend_op_array *op_array) in zend_adjust_fcall_stack_size_graph() argument
1465 zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in zend_adjust_fcall_stack_size_graph()
1482 static bool needs_live_range(zend_op_array *op_array, zend_op *def_opline) { in needs_live_range() argument
1483 zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in needs_live_range()
1484 zend_ssa_op *ssa_op = &func_info->ssa.ops[def_opline - op_array->opcodes]; in needs_live_range()
1503 zend_op_array *op_array, zend_op_array_func_t func, void *context) { in zend_foreach_op_array_helper() argument
1504 func(op_array, context); in zend_foreach_op_array_helper()
1505 for (uint32_t i = 0; i < op_array->num_dynamic_func_defs; i++) { in zend_foreach_op_array_helper()
1506 zend_foreach_op_array_helper(op_array->dynamic_func_defs[i], func, context); in zend_foreach_op_array_helper()
1513 zend_op_array *op_array; in zend_foreach_op_array() local
1517 ZEND_HASH_MAP_FOREACH_PTR(&script->function_table, op_array) { in zend_foreach_op_array()
1518 zend_foreach_op_array_helper(op_array, func, context); in zend_foreach_op_array()
1526 ZEND_HASH_MAP_FOREACH_PTR(&ce->function_table, op_array) { in zend_foreach_op_array()
1527 if (op_array->scope == ce in zend_foreach_op_array()
1528 && op_array->type == ZEND_USER_FUNCTION in zend_foreach_op_array()
1529 && !(op_array->fn_flags & ZEND_ACC_ABSTRACT) in zend_foreach_op_array()
1530 && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in zend_foreach_op_array()
1531 zend_foreach_op_array_helper(op_array, func, context); in zend_foreach_op_array()
1537 static void step_optimize_op_array(zend_op_array *op_array, void *context) { in step_optimize_op_array() argument
1538 zend_optimize_op_array(op_array, (zend_optimizer_ctx *) context); in step_optimize_op_array()
1541 static void step_adjust_fcall_stack_size(zend_op_array *op_array, void *context) { in step_adjust_fcall_stack_size() argument
1542 zend_adjust_fcall_stack_size(op_array, (zend_optimizer_ctx *) context); in step_adjust_fcall_stack_size()
1545 static void step_dump_after_optimizer(zend_op_array *op_array, void *context) { in step_dump_after_optimizer() argument
1546 zend_dump_op_array(op_array, ZEND_DUMP_LIVE_RANGES, "after optimizer", NULL); in step_dump_after_optimizer()
1561 zend_op_array *op_array; in zend_optimize_script() local
1663 op_array = call_graph.op_arrays[i]; in zend_optimize_script()
1664 func_info = ZEND_FUNC_INFO(op_array); in zend_optimize_script()
1666 zend_redo_pass_two_ex(op_array, &func_info->ssa); in zend_optimize_script()
1667 if (op_array->live_range) { in zend_optimize_script()
1668 zend_recalc_live_ranges(op_array, needs_live_range); in zend_optimize_script()
1671 op_array->T -= ZEND_OBSERVER_ENABLED; // redo_pass_two will re-increment it in zend_optimize_script()
1673 zend_redo_pass_two(op_array); in zend_optimize_script()
1674 if (op_array->live_range) { in zend_optimize_script()
1675 zend_recalc_live_ranges(op_array, NULL); in zend_optimize_script()
1696 ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) { in zend_optimize_script()
1697 if (op_array->scope != ce && op_array->type == ZEND_USER_FUNCTION) { in zend_optimize_script()
1699 zend_hash_find_ptr(&op_array->scope->function_table, name); in zend_optimize_script()
1702 if (orig_op_array != op_array) { in zend_optimize_script()
1703 uint32_t fn_flags = op_array->fn_flags; in zend_optimize_script()
1704 zend_function *prototype = op_array->prototype; in zend_optimize_script()
1705 HashTable *ht = op_array->static_variables; in zend_optimize_script()
1707 *op_array = *orig_op_array; in zend_optimize_script()
1708 op_array->fn_flags = fn_flags; in zend_optimize_script()
1709 op_array->prototype = prototype; in zend_optimize_script()
1710 op_array->static_variables = ht; in zend_optimize_script()