Lines Matching refs:op_array

81 				zend_ssa_check_scc_var(op_array, ssa, var2, index, stack); \
125 if (op_array->opcodes[line].opcode == ZEND_OP_DATA) { \
135 } else if ((uint32_t)line+1 < op_array->last && \
136 op_array->opcodes[line+1].opcode == ZEND_OP_DATA) { \
178 static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_ssa *ssa, int var, int *inde…
219 ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
232 zend_ssa_check_scc_var(op_array, ssa, j, &index, &stack);
269 static int zend_scc_next(const zend_op_array *op_array, zend_ssa *ssa, int var, zend_scc_iterator *… in zend_scc_next() argument
313 if (op_array->opcodes[use].opcode == ZEND_OP_DATA) { in zend_scc_next()
331 } else if ((uint32_t)use+1 < op_array->last && in zend_scc_next()
332 op_array->opcodes[use+1].opcode == ZEND_OP_DATA) { in zend_scc_next()
388 static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_ssa *ssa, int var, int *inde… in zend_ssa_check_scc_var() argument
411 var2 = zend_scc_next(op_array, ssa, var, iterators + var); in zend_ssa_check_scc_var()
443 ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ in zend_ssa_find_sccs() argument
461 zend_ssa_check_scc_var(op_array, ssa, j, &index, &stack, &vstack, iterators); in zend_ssa_find_sccs()
490 ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{… in zend_ssa_find_false_dependencies() argument
500 if (!op_array->function_name || !ssa->vars || !ssa->ops) { in zend_ssa_find_false_dependencies()
511 if (!zend_ssa_is_no_val_use(&op_array->opcodes[use], &ssa->ops[use], i)) { in zend_ssa_find_false_dependencies()
797 const zend_op_array *op_array, const zend_ssa *ssa, in zend_inference_calc_binary_op_range() argument
1081 static bool zend_inference_calc_range(const zend_op_array *op_array, const zend_ssa *ssa, int var, … in zend_inference_calc_range() argument
1110 opline = op_array->opcodes + line; in zend_inference_calc_range()
1154 ZSTR_VAL(op_array->function_name), in zend_inference_calc_range()
1256 opline = op_array->opcodes + line; in zend_inference_calc_range()
1259 return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp); in zend_inference_calc_range()
1262 ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, const zend_ssa *ssa, co… in zend_inference_propagate_range() argument
1279 op_array, ssa, opline, ssa_op, opline->opcode, tmp); in zend_inference_propagate_range()
1493 op_array, ssa, opline, ssa_op, in zend_inference_propagate_range()
1520 if (op_array->arg_info && in zend_inference_propagate_range()
1521 opline->op1.num <= op_array->num_args) { in zend_inference_propagate_range()
1522 zend_type type = op_array->arg_info[opline->op1.num-1].type; in zend_inference_propagate_range()
1562 const zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in zend_inference_propagate_range()
1568 call_info = func_info->call_map[opline - op_array->opcodes]; in zend_inference_propagate_range()
1573 func_info = ZEND_FUNC_INFO(&call_info->callee_func->op_array); in zend_inference_propagate_range()
1610 static void zend_inference_init_range(const zend_op_array *op_array, zend_ssa *ssa, int var, bool u… in zend_inference_init_range() argument
1654 static bool zend_ssa_range_widening(const zend_op_array *op_array, zend_ssa *ssa, int var, int scc) in zend_ssa_range_widening() argument
1658 if (zend_inference_calc_range(op_array, ssa, var, 1, 0, &tmp)) { in zend_ssa_range_widening()
1699 static bool zend_ssa_range_narrowing(const zend_op_array *op_array, zend_ssa *ssa, int var, int scc) in zend_ssa_range_narrowing() argument
1703 if (zend_inference_calc_range(op_array, ssa, var, 0, 1, &tmp)) { in zend_ssa_range_narrowing()
1718 zend_check_inner_cycles(op_array, ssa, worklist, visited, var2)) { \
1723 static bool zend_check_inner_cycles(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset workl… in zend_check_inner_cycles() argument
1735 static void zend_infer_ranges_warmup(const zend_op_array *op_array, zend_ssa *ssa, const int *scc_v… in zend_infer_ranges_warmup() argument
1751 zend_check_inner_cycles(op_array, ssa, worklist, visited, j)) { in zend_infer_ranges_warmup()
1774 if (zend_inference_calc_range(op_array, ssa, j, 0, 0, &tmp)) { in zend_infer_ranges_warmup()
1833 static void zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ in zend_infer_ranges() argument
1868 } else if (zend_inference_calc_range(op_array, ssa, j, 0, 1, &tmp)) { in zend_infer_ranges()
1869 zend_inference_init_range(op_array, ssa, j, tmp.underflow, tmp.min, tmp.max, tmp.overflow); in zend_infer_ranges()
1871 zend_inference_init_range(op_array, ssa, j, 1, ZEND_LONG_MIN, ZEND_LONG_MAX, 1); in zend_infer_ranges()
1885 zend_infer_ranges_warmup(op_array, ssa, scc_var, next_scc_var, scc); in zend_infer_ranges()
1897 if (zend_ssa_range_widening(op_array, ssa, j, scc)) { in zend_infer_ranges()
1906 zend_inference_init_range(op_array, ssa, j, 1, ZEND_LONG_MIN, ZEND_LONG_MAX, 1); in zend_infer_ranges()
1913 if (zend_ssa_range_widening(op_array, ssa, j, scc)) { in zend_infer_ranges()
1924 zend_ssa_range_narrowing(op_array, ssa, j, scc); in zend_infer_ranges()
1931 if (zend_ssa_range_narrowing(op_array, ssa, j, scc)) { in zend_infer_ranges()
1967 if (__ssa_var->var < op_array->num_args) { \
1973 if (__ssa_var->var < op_array->last_var) { \
1987 __ssa_var->var >= op_array->last_var || \
1991 emit_type_narrowing_warning(op_array, ssa, __var); \
1996 add_usages(op_array, ssa, worklist, __var); \
2016 add_usages(op_array, ssa, worklist, var); \
2033 static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var) in add_usages() argument
2057 if (op_array->opcodes[use].opcode == ZEND_OP_DATA) { in add_usages()
2068 } else if (use + 1 < op_array->last in add_usages()
2069 && op_array->opcodes[use + 1].opcode == ZEND_OP_DATA) { in add_usages()
2086 static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa *ssa, int var) in emit_type_narrowing_warning() argument
2089 const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL; in emit_type_narrowing_warning()
2093 E_WARNING, op_array->filename, lineno, in emit_type_narrowing_warning()
2439 static const zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, zend_ssa *ssa,… in zend_fetch_prop_info() argument
2445 if (opline->op1_type == IS_UNUSED && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in zend_fetch_prop_info()
2446 ce = op_array->scope; in zend_fetch_prop_info()
2453 op_array->scope); in zend_fetch_prop_info()
2462 …_fetch_static_prop_info(const zend_script *script, const zend_op_array *op_array, const zend_ssa *… in zend_fetch_static_prop_info() argument
2474 ce = op_array->scope; in zend_fetch_static_prop_info()
2477 if (op_array->scope && (op_array->scope->ce_flags & ZEND_ACC_LINKED)) { in zend_fetch_static_prop_info()
2478 ce = op_array->scope->parent; in zend_fetch_static_prop_info()
2484 ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(zv + 1)); in zend_fetch_static_prop_info()
2489 prop_info = lookup_prop_info(ce, Z_STR_P(zv), op_array->scope); in zend_fetch_static_prop_info()
2530 const zend_op_array *op_array, in _zend_update_type_info() argument
2755 prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); in _zend_update_type_info()
2767 prop_info = zend_fetch_static_prop_info(script, op_array, ssa, opline); in _zend_update_type_info()
3046 zend_fetch_prop_info(op_array, ssa, opline, ssa_op), &ce); in _zend_update_type_info()
3135 || opline + 1 != op_array->opcodes + ssa->vars[ssa_op->result_def].use_chain) { in _zend_update_type_info()
3256 if (op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE) { in _zend_update_type_info()
3313 zend_arg_info *arg_info = &op_array->arg_info[opline->op1.num-1]; in _zend_update_type_info()
3349 if (op_array->scope) { in _zend_update_type_info()
3350 UPDATE_SSA_OBJ_TYPE(op_array->scope, 0, ssa_op->result_def); in _zend_update_type_info()
3356 … if (op_array->scope && op_array->scope->parent && (op_array->scope->ce_flags & ZEND_ACC_LINKED)) { in _zend_update_type_info()
3357 UPDATE_SSA_OBJ_TYPE(op_array->scope->parent, 0, ssa_op->result_def); in _zend_update_type_info()
3363 if (op_array->scope && (op_array->scope->ce_flags & ZEND_ACC_FINAL)) { in _zend_update_type_info()
3364 UPDATE_SSA_OBJ_TYPE(op_array->scope, 0, ssa_op->result_def); in _zend_update_type_info()
3376 ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(zv+1)); in _zend_update_type_info()
3387 ce = zend_optimizer_get_class_entry_from_op1(script, op_array, opline); in _zend_update_type_info()
3467 if (!op_array->function_name) { in _zend_update_type_info()
3643 if (j != (opline - op_array->opcodes) + 1) { in _zend_update_type_info()
3648 opcode = op_array->opcodes[j].opcode; in _zend_update_type_info()
3756 || opline + 1 != op_array->opcodes + ssa->vars[ssa_op->result_def].use_chain) { in _zend_update_type_info()
3769 if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in _zend_update_type_info()
3770 UPDATE_SSA_OBJ_TYPE(op_array->scope, 1, ssa_op->result_def); in _zend_update_type_info()
3788 const zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); in _zend_update_type_info()
3800 ce = op_array->scope; in _zend_update_type_info()
3831 zend_fetch_static_prop_info(script, op_array, ssa, opline), &ce); in _zend_update_type_info()
3889 zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in _zend_update_type_info()
3895 call_info = func_info->call_map[opline - op_array->opcodes]; in _zend_update_type_info()
3918 …const zend_class_constant *cc = zend_fetch_class_const_info(script, op_array, opline, &is_prototyp… in _zend_update_type_info()
3970 zend_arg_info *ret_info = op_array->arg_info - 1; in _zend_update_type_info()
4022 … const zend_property_info *prop_info = zend_fetch_static_prop_info(script, op_array, ssa, opline); in _zend_update_type_info()
4118 const zend_op_array *op_array, in zend_update_type_info() argument
4126 …return _zend_update_type_info(op_array, ssa, script, NULL, opline, ssa_op, ssa_opcodes, optimizati… in zend_update_type_info()
4186 static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script, ze… in zend_infer_types_ex() argument
4262 …if (_zend_update_type_info(op_array, ssa, script, worklist, op_array->opcodes + i, ssa->ops + i, N… in zend_infer_types_ex()
4309 const zend_op_array *op_array, zend_ssa *ssa, int var_num, in can_convert_to_double() argument
4322 zend_op *opline = &op_array->opcodes[use]; in can_convert_to_double()
4419 if (!can_convert_to_double(op_array, ssa, ssa_op->result_def, &orig_result, visited)) { in can_convert_to_double()
4432 if (!can_convert_to_double(op_array, ssa, phi->ssa_var, value, visited)) { in can_convert_to_double()
4440 static zend_result zend_type_narrowing(const zend_op_array *op_array, const zend_script *script, ze… in zend_type_narrowing() argument
4454 for (v = op_array->last_var; v < ssa->vars_count; v++) { in zend_type_narrowing()
4458 opline = op_array->opcodes + ssa->vars[v].definition; in zend_type_narrowing()
4466 if (can_convert_to_double(op_array, ssa, v, value, visited)) { in zend_type_narrowing()
4484 if (zend_infer_types_ex(op_array, script, ssa, worklist, optimization_level) == FAILURE) { in zend_type_narrowing()
4493 static bool is_recursive_tail_call(const zend_op_array *op_array, in is_recursive_tail_call() argument
4496 zend_func_info *info = ZEND_FUNC_INFO(op_array); in is_recursive_tail_call()
4499 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 && in is_recursive_tail_call()
4500 info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition >= 0) { in is_recursive_tail_call()
4502 …zend_op *op = op_array->opcodes + info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use… in is_recursive_tail_call()
4505 zend_call_info *call_info = info->call_map[op - op_array->opcodes]; in is_recursive_tail_call()
4506 if (call_info && op_array == &call_info->callee_func->op_array) { in is_recursive_tail_call()
4542 const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret) in zend_init_func_return_info() argument
4544 ZEND_ASSERT((op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE)); in zend_init_func_return_info()
4549 (zend_function *) op_array, script, &ret->ce, &is_instanceof, /* use_tentative_return_info */ 1); in zend_init_func_return_info()
4555 static void zend_func_return_info(const zend_op_array *op_array, in zend_func_return_info() argument
4561 zend_func_info *info = ZEND_FUNC_INFO(op_array); in zend_func_return_info()
4575 if (op_array->fn_flags & ZEND_ACC_GENERATOR) { in zend_func_return_info()
4592 zend_op *opline = op_array->opcodes + blocks[j].start + blocks[j].len - 1; in zend_func_return_info()
4595 zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[opline - op_array->opcodes] : NULL; in zend_func_return_info()
4601 if (is_recursive_tail_call(op_array, opline)) { in zend_func_return_info()
4696 if (!(op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE)) { in zend_func_return_info()
4712 static zend_result zend_infer_types(const zend_op_array *op_array, const zend_script *script, zend_… in zend_infer_types() argument
4723 for (j = op_array->last_var; j < ssa_vars_count; j++) { in zend_infer_types()
4727 if (zend_infer_types_ex(op_array, script, ssa, worklist, optimization_level) == FAILURE) { in zend_infer_types()
4734 zend_type_narrowing(op_array, script, ssa, optimization_level); in zend_infer_types()
4737 if (ZEND_FUNC_INFO(op_array)) { in zend_infer_types()
4738 zend_func_return_info(op_array, script, 1, 0, &ZEND_FUNC_INFO(op_array)->return_info); in zend_infer_types()
4745 static void zend_mark_cv_references(const zend_op_array *op_array, const zend_script *script, zend_… in zend_mark_cv_references() argument
4760 if (def >= 0 && ssa->vars[var].var < op_array->last_var) { in zend_mark_cv_references()
4761 opline = op_array->opcodes + def; in zend_mark_cv_references()
4766 arg_info = &op_array->arg_info[opline->op1.num-1]; in zend_mark_cv_references()
4797 if (!(op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE)) { in zend_mark_cv_references()
4859 if (op_array->opcodes[use].opcode == ZEND_UNSET_CV in zend_mark_cv_references()
4860 && op_array->function_name) { in zend_mark_cv_references()
4883 ZEND_API zend_result zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const ze… in zend_ssa_inference() argument
4893 if (!op_array->function_name) { in zend_ssa_inference()
4894 for (i = 0; i < op_array->last_var; i++) { in zend_ssa_inference()
4899 for (i = 0; i < op_array->last_var; i++) { in zend_ssa_inference()
4907 for (i = op_array->last_var; i < ssa->vars_count; i++) { in zend_ssa_inference()
4912 zend_mark_cv_references(op_array, script, ssa); in zend_ssa_inference()
4914 zend_infer_ranges(op_array, ssa); in zend_ssa_inference()
4916 if (zend_infer_types(op_array, script, ssa, optimization_level) == FAILURE) { in zend_ssa_inference()
4924 …(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *… in zend_may_throw_ex() argument
5051 return zend_may_throw(opline + 1, ssa_op + 1, op_array, ssa); in zend_may_throw_ex()
5237 && prop_info->ce != op_array->scope; in zend_may_throw_ex()
5259 if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { in zend_may_throw_ex()
5263 if (EXPECTED(arg_num <= op_array->num_args)) { in zend_may_throw_ex()
5264 cur_arg_info = &op_array->arg_info[arg_num-1]; in zend_may_throw_ex()
5265 } else if (UNEXPECTED(op_array->fn_flags & ZEND_ACC_VARIADIC)) { in zend_may_throw_ex()
5266 cur_arg_info = &op_array->arg_info[op_array->num_args]; in zend_may_throw_ex()
5337 …(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *… in zend_may_throw() argument
5339 return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO()); in zend_may_throw()