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()
787 const zend_op_array *op_array, const zend_ssa *ssa, in zend_inference_calc_binary_op_range() argument
1071 static bool zend_inference_calc_range(const zend_op_array *op_array, const zend_ssa *ssa, int var, … in zend_inference_calc_range() argument
1100 opline = op_array->opcodes + line; in zend_inference_calc_range()
1144 ZSTR_VAL(op_array->function_name), in zend_inference_calc_range()
1246 opline = op_array->opcodes + line; in zend_inference_calc_range()
1249 return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp); in zend_inference_calc_range()
1252 ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, const zend_ssa *ssa, co… in zend_inference_propagate_range() argument
1269 op_array, ssa, opline, ssa_op, opline->opcode, tmp); in zend_inference_propagate_range()
1483 op_array, ssa, opline, ssa_op, in zend_inference_propagate_range()
1510 if (op_array->arg_info && in zend_inference_propagate_range()
1511 opline->op1.num <= op_array->num_args) { in zend_inference_propagate_range()
1512 zend_type type = op_array->arg_info[opline->op1.num-1].type; in zend_inference_propagate_range()
1552 const zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in zend_inference_propagate_range()
1558 call_info = func_info->call_map[opline - op_array->opcodes]; in zend_inference_propagate_range()
1563 func_info = ZEND_FUNC_INFO(&call_info->callee_func->op_array); in zend_inference_propagate_range()
1600 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
1644 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
1648 if (zend_inference_calc_range(op_array, ssa, var, 1, 0, &tmp)) { in zend_ssa_range_widening()
1689 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
1693 if (zend_inference_calc_range(op_array, ssa, var, 0, 1, &tmp)) { in zend_ssa_range_narrowing()
1708 zend_check_inner_cycles(op_array, ssa, worklist, visited, var2)) { \
1713 static bool zend_check_inner_cycles(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset workl… in zend_check_inner_cycles() argument
1725 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
1741 zend_check_inner_cycles(op_array, ssa, worklist, visited, j)) { in zend_infer_ranges_warmup()
1764 if (zend_inference_calc_range(op_array, ssa, j, 0, 0, &tmp)) { in zend_infer_ranges_warmup()
1823 static void zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ in zend_infer_ranges() argument
1858 } else if (zend_inference_calc_range(op_array, ssa, j, 0, 1, &tmp)) { in zend_infer_ranges()
1859 zend_inference_init_range(op_array, ssa, j, tmp.underflow, tmp.min, tmp.max, tmp.overflow); in zend_infer_ranges()
1861 zend_inference_init_range(op_array, ssa, j, 1, ZEND_LONG_MIN, ZEND_LONG_MAX, 1); in zend_infer_ranges()
1875 zend_infer_ranges_warmup(op_array, ssa, scc_var, next_scc_var, scc); in zend_infer_ranges()
1887 if (zend_ssa_range_widening(op_array, ssa, j, scc)) { in zend_infer_ranges()
1896 zend_inference_init_range(op_array, ssa, j, 1, ZEND_LONG_MIN, ZEND_LONG_MAX, 1); in zend_infer_ranges()
1903 if (zend_ssa_range_widening(op_array, ssa, j, scc)) { in zend_infer_ranges()
1914 zend_ssa_range_narrowing(op_array, ssa, j, scc); in zend_infer_ranges()
1921 if (zend_ssa_range_narrowing(op_array, ssa, j, scc)) { in zend_infer_ranges()
1957 if (__ssa_var->var < op_array->num_args) { \
1963 if (__ssa_var->var < op_array->last_var) { \
1977 __ssa_var->var >= op_array->last_var || \
1981 emit_type_narrowing_warning(op_array, ssa, __var); \
1986 add_usages(op_array, ssa, worklist, __var); \
2006 add_usages(op_array, ssa, worklist, var); \
2023 static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var) in add_usages() argument
2047 if (op_array->opcodes[use].opcode == ZEND_OP_DATA) { in add_usages()
2058 } else if (use + 1 < op_array->last in add_usages()
2059 && op_array->opcodes[use + 1].opcode == ZEND_OP_DATA) { in add_usages()
2076 static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa *ssa, int var) in emit_type_narrowing_warning() argument
2079 const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL; in emit_type_narrowing_warning()
2083 E_WARNING, op_array->filename, lineno, in emit_type_narrowing_warning()
2429 static const zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, zend_ssa *ssa,… in zend_fetch_prop_info() argument
2435 if (opline->op1_type == IS_UNUSED && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in zend_fetch_prop_info()
2436 ce = op_array->scope; in zend_fetch_prop_info()
2443 op_array->scope); in zend_fetch_prop_info()
2452 …_fetch_static_prop_info(const zend_script *script, const zend_op_array *op_array, const zend_ssa *… in zend_fetch_static_prop_info() argument
2464 ce = op_array->scope; in zend_fetch_static_prop_info()
2467 if (op_array->scope && (op_array->scope->ce_flags & ZEND_ACC_LINKED)) { in zend_fetch_static_prop_info()
2468 ce = op_array->scope->parent; in zend_fetch_static_prop_info()
2474 ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(zv + 1)); in zend_fetch_static_prop_info()
2479 prop_info = lookup_prop_info(ce, Z_STR_P(zv), op_array->scope); in zend_fetch_static_prop_info()
2520 const zend_op_array *op_array, in _zend_update_type_info() argument
2745 prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); in _zend_update_type_info()
2757 prop_info = zend_fetch_static_prop_info(script, op_array, ssa, opline); in _zend_update_type_info()
3036 zend_fetch_prop_info(op_array, ssa, opline, ssa_op), &ce); in _zend_update_type_info()
3125 || opline + 1 != op_array->opcodes + ssa->vars[ssa_op->result_def].use_chain) { in _zend_update_type_info()
3246 if (op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE) { in _zend_update_type_info()
3303 zend_arg_info *arg_info = &op_array->arg_info[opline->op1.num-1]; in _zend_update_type_info()
3339 if (op_array->scope) { in _zend_update_type_info()
3340 UPDATE_SSA_OBJ_TYPE(op_array->scope, 0, ssa_op->result_def); in _zend_update_type_info()
3346 … if (op_array->scope && op_array->scope->parent && (op_array->scope->ce_flags & ZEND_ACC_LINKED)) { in _zend_update_type_info()
3347 UPDATE_SSA_OBJ_TYPE(op_array->scope->parent, 0, ssa_op->result_def); in _zend_update_type_info()
3353 if (op_array->scope && (op_array->scope->ce_flags & ZEND_ACC_FINAL)) { in _zend_update_type_info()
3354 UPDATE_SSA_OBJ_TYPE(op_array->scope, 0, ssa_op->result_def); in _zend_update_type_info()
3366 ce = zend_optimizer_get_class_entry(script, op_array, Z_STR_P(zv+1)); in _zend_update_type_info()
3377 ce = zend_optimizer_get_class_entry_from_op1(script, op_array, opline); in _zend_update_type_info()
3457 if (!op_array->function_name) { in _zend_update_type_info()
3633 if (j != (opline - op_array->opcodes) + 1) { in _zend_update_type_info()
3638 opcode = op_array->opcodes[j].opcode; in _zend_update_type_info()
3746 || opline + 1 != op_array->opcodes + ssa->vars[ssa_op->result_def].use_chain) { in _zend_update_type_info()
3759 if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { in _zend_update_type_info()
3760 UPDATE_SSA_OBJ_TYPE(op_array->scope, 1, ssa_op->result_def); in _zend_update_type_info()
3778 const zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); in _zend_update_type_info()
3790 ce = op_array->scope; in _zend_update_type_info()
3821 zend_fetch_static_prop_info(script, op_array, ssa, opline), &ce); in _zend_update_type_info()
3879 zend_func_info *func_info = ZEND_FUNC_INFO(op_array); in _zend_update_type_info()
3885 call_info = func_info->call_map[opline - op_array->opcodes]; in _zend_update_type_info()
3908 …const zend_class_constant *cc = zend_fetch_class_const_info(script, op_array, opline, &is_prototyp… in _zend_update_type_info()
3960 zend_arg_info *ret_info = op_array->arg_info - 1; in _zend_update_type_info()
4012 … const zend_property_info *prop_info = zend_fetch_static_prop_info(script, op_array, ssa, opline); in _zend_update_type_info()
4108 const zend_op_array *op_array, in zend_update_type_info() argument
4116 …return _zend_update_type_info(op_array, ssa, script, NULL, opline, ssa_op, ssa_opcodes, optimizati… in zend_update_type_info()
4176 static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script, ze… in zend_infer_types_ex() argument
4252 …if (_zend_update_type_info(op_array, ssa, script, worklist, op_array->opcodes + i, ssa->ops + i, N… in zend_infer_types_ex()
4299 const zend_op_array *op_array, zend_ssa *ssa, int var_num, in can_convert_to_double() argument
4312 zend_op *opline = &op_array->opcodes[use]; in can_convert_to_double()
4409 if (!can_convert_to_double(op_array, ssa, ssa_op->result_def, &orig_result, visited)) { in can_convert_to_double()
4422 if (!can_convert_to_double(op_array, ssa, phi->ssa_var, value, visited)) { in can_convert_to_double()
4430 static zend_result zend_type_narrowing(const zend_op_array *op_array, const zend_script *script, ze… in zend_type_narrowing() argument
4444 for (v = op_array->last_var; v < ssa->vars_count; v++) { in zend_type_narrowing()
4448 opline = op_array->opcodes + ssa->vars[v].definition; in zend_type_narrowing()
4456 if (can_convert_to_double(op_array, ssa, v, value, visited)) { in zend_type_narrowing()
4474 if (zend_infer_types_ex(op_array, script, ssa, worklist, optimization_level) == FAILURE) { in zend_type_narrowing()
4483 static bool is_recursive_tail_call(const zend_op_array *op_array, in is_recursive_tail_call() argument
4486 zend_func_info *info = ZEND_FUNC_INFO(op_array); in is_recursive_tail_call()
4489 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 && in is_recursive_tail_call()
4490 info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition >= 0) { in is_recursive_tail_call()
4492 …zend_op *op = op_array->opcodes + info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use… in is_recursive_tail_call()
4495 zend_call_info *call_info = info->call_map[op - op_array->opcodes]; in is_recursive_tail_call()
4496 if (call_info && op_array == &call_info->callee_func->op_array) { in is_recursive_tail_call()
4532 const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret) in zend_init_func_return_info() argument
4534 ZEND_ASSERT((op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE)); in zend_init_func_return_info()
4539 (zend_function *) op_array, script, &ret->ce, &is_instanceof, /* use_tentative_return_info */ 1); in zend_init_func_return_info()
4545 static void zend_func_return_info(const zend_op_array *op_array, in zend_func_return_info() argument
4551 zend_func_info *info = ZEND_FUNC_INFO(op_array); in zend_func_return_info()
4565 if (op_array->fn_flags & ZEND_ACC_GENERATOR) { in zend_func_return_info()
4582 zend_op *opline = op_array->opcodes + blocks[j].start + blocks[j].len - 1; in zend_func_return_info()
4585 zend_ssa_op *ssa_op = ssa->ops ? &ssa->ops[opline - op_array->opcodes] : NULL; in zend_func_return_info()
4591 if (is_recursive_tail_call(op_array, opline)) { in zend_func_return_info()
4686 if (!(op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE)) { in zend_func_return_info()
4702 static zend_result zend_infer_types(const zend_op_array *op_array, const zend_script *script, zend_… in zend_infer_types() argument
4713 for (j = op_array->last_var; j < ssa_vars_count; j++) { in zend_infer_types()
4717 if (zend_infer_types_ex(op_array, script, ssa, worklist, optimization_level) == FAILURE) { in zend_infer_types()
4724 zend_type_narrowing(op_array, script, ssa, optimization_level); in zend_infer_types()
4727 if (ZEND_FUNC_INFO(op_array)) { in zend_infer_types()
4728 zend_func_return_info(op_array, script, 1, 0, &ZEND_FUNC_INFO(op_array)->return_info); in zend_infer_types()
4735 static void zend_mark_cv_references(const zend_op_array *op_array, const zend_script *script, zend_… in zend_mark_cv_references() argument
4750 if (def >= 0 && ssa->vars[var].var < op_array->last_var) { in zend_mark_cv_references()
4751 opline = op_array->opcodes + def; in zend_mark_cv_references()
4756 arg_info = &op_array->arg_info[opline->op1.num-1]; in zend_mark_cv_references()
4787 if (!(op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE)) { in zend_mark_cv_references()
4849 if (op_array->opcodes[use].opcode == ZEND_UNSET_CV in zend_mark_cv_references()
4850 && op_array->function_name) { in zend_mark_cv_references()
4873 ZEND_API zend_result zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const ze… in zend_ssa_inference() argument
4883 if (!op_array->function_name) { in zend_ssa_inference()
4884 for (i = 0; i < op_array->last_var; i++) { in zend_ssa_inference()
4889 for (i = 0; i < op_array->last_var; i++) { in zend_ssa_inference()
4897 for (i = op_array->last_var; i < ssa->vars_count; i++) { in zend_ssa_inference()
4902 zend_mark_cv_references(op_array, script, ssa); in zend_ssa_inference()
4904 zend_infer_ranges(op_array, ssa); in zend_ssa_inference()
4906 if (zend_infer_types(op_array, script, ssa, optimization_level) == FAILURE) { in zend_ssa_inference()
4914 …(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
5041 return zend_may_throw(opline + 1, ssa_op + 1, op_array, ssa); in zend_may_throw_ex()
5227 && prop_info->ce != op_array->scope; in zend_may_throw_ex()
5249 if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { in zend_may_throw_ex()
5253 if (EXPECTED(arg_num <= op_array->num_args)) { in zend_may_throw_ex()
5254 cur_arg_info = &op_array->arg_info[arg_num-1]; in zend_may_throw_ex()
5255 } else if (UNEXPECTED(op_array->fn_flags & ZEND_ACC_VARIADIC)) { in zend_may_throw_ex()
5256 cur_arg_info = &op_array->arg_info[op_array->num_args]; in zend_may_throw_ex()
5327 …(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *… in zend_may_throw() argument
5329 return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO()); in zend_may_throw()