Lines Matching refs:opline

568 		zend_op *opline, zend_ssa_op *ssa_op, zend_uchar opcode, zend_ssa_range *tmp) {  in zend_inference_calc_binary_op_range()  argument
852 zend_op *opline; in zend_inference_calc_range() local
991 opline = op_array->opcodes + line; in zend_inference_calc_range()
995 switch (opline->opcode) { in zend_inference_calc_range()
1008 op_array, ssa, opline, &ssa->ops[line], opline->opcode, tmp); in zend_inference_calc_range()
1041 if (opline->extended_value == IS_NULL) { in zend_inference_calc_range()
1045 } else if (opline->extended_value == _IS_BOOL) { in zend_inference_calc_range()
1057 } else if (opline->extended_value == IS_LONG) { in zend_inference_calc_range()
1362 if ((opline+1)->opcode == ZEND_OP_DATA) { in zend_inference_calc_range()
1363 opline++; in zend_inference_calc_range()
1382 if (opline->extended_value == 0) { in zend_inference_calc_range()
1385 op_array, ssa, opline, &ssa->ops[line], in zend_inference_calc_range()
1386 get_compound_assign_op(opline->opcode), tmp); in zend_inference_calc_range()
1388 } else if ((opline+1)->opcode == ZEND_OP_DATA) { in zend_inference_calc_range()
1390 opline++; in zend_inference_calc_range()
1403 if ((opline-1)->opcode == ZEND_ASSIGN_DIM || in zend_inference_calc_range()
1404 (opline-1)->opcode == ZEND_ASSIGN_OBJ || in zend_inference_calc_range()
1405 (opline-1)->opcode == ZEND_ASSIGN_ADD || in zend_inference_calc_range()
1406 (opline-1)->opcode == ZEND_ASSIGN_SUB || in zend_inference_calc_range()
1407 (opline-1)->opcode == ZEND_ASSIGN_MUL) { in zend_inference_calc_range()
1426 (int)opline->op1.num-1 < func_info->num_args && in zend_inference_calc_range()
1427 func_info->arg_info[opline->op1.num-1].info.has_range) { in zend_inference_calc_range()
1428 *tmp = func_info->arg_info[opline->op1.num-1].info.range; in zend_inference_calc_range()
1431 opline->op1.num <= op_array->num_args) { in zend_inference_calc_range()
1432 if (ZEND_TYPE_CODE(op_array->arg_info[opline->op1.num-1].type) == IS_LONG) { in zend_inference_calc_range()
1438 } else if (ZEND_TYPE_CODE(op_array->arg_info[opline->op1.num-1].type) == _IS_BOOL) { in zend_inference_calc_range()
1482 call_info = func_info->call_map[opline - op_array->opcodes]; in zend_inference_calc_range()
2279 zend_op *opline = op_array->opcodes + i; in zend_update_type_info() local
2286 if (opline->opcode == ZEND_OP_DATA) { in zend_update_type_info()
2287 opline--; in zend_update_type_info()
2312 switch (opline->opcode) { in zend_update_type_info()
2325 tmp = binary_op_result_type(ssa, opline->opcode, t1, t2, ssa_ops[i].result_def); in zend_update_type_info()
2371 (opline->op1_type == IS_CV) && in zend_update_type_info()
2372 (opline->extended_value == IS_ARRAY || in zend_update_type_info()
2373 opline->extended_value == IS_OBJECT)) { in zend_update_type_info()
2376 (opline->op1_type == IS_CV) && in zend_update_type_info()
2377 opline->extended_value == IS_STRING) { in zend_update_type_info()
2384 if (opline->extended_value == _IS_BOOL) { in zend_update_type_info()
2387 tmp |= 1 << opline->extended_value; in zend_update_type_info()
2391 } else if ((opline->extended_value == IS_ARRAY || in zend_update_type_info()
2392 opline->extended_value == IS_OBJECT) && in zend_update_type_info()
2395 } else if (opline->extended_value == IS_STRING && in zend_update_type_info()
2403 if (opline->extended_value == IS_ARRAY) { in zend_update_type_info()
2420 if ((t1 & (MAY_BE_RC1|MAY_BE_REF)) && (opline->op1_type == IS_CV)) { in zend_update_type_info()
2432 if (opline->op1_type == IS_CV) { in zend_update_type_info()
2436 if (opline->opcode != ZEND_QM_ASSIGN) { in zend_update_type_info()
2439 if (opline->opcode == ZEND_JMP_SET) { in zend_update_type_info()
2461 if (opline->extended_value == ZEND_ASSIGN_OBJ) { in zend_update_type_info()
2466 } else if (opline->extended_value == ZEND_ASSIGN_DIM) { in zend_update_type_info()
2480 ssa, get_compound_assign_op(opline->opcode), t1, t2, ssa_ops[i].op1_def); in zend_update_type_info()
2488 if (opline->extended_value == ZEND_ASSIGN_DIM) { in zend_update_type_info()
2489 if (opline->op1_type == IS_CV) { in zend_update_type_info()
2490 orig = assign_dim_result_type(orig, OP2_INFO(), tmp, opline->op2_type); in zend_update_type_info()
2494 } else if (opline->extended_value == ZEND_ASSIGN_OBJ) { in zend_update_type_info()
2495 if (opline->op1_type == IS_CV) { in zend_update_type_info()
2512 if (opline->extended_value == ZEND_ASSIGN_DIM) { in zend_update_type_info()
2513 if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
2527 } else if (opline->extended_value == ZEND_ASSIGN_OBJ) { in zend_update_type_info()
2551 (opline->opcode == ZEND_PRE_DEC && in zend_update_type_info()
2554 (opline->opcode == ZEND_PRE_INC && in zend_update_type_info()
2567 if (opline->opcode == ZEND_PRE_INC) { in zend_update_type_info()
2613 (opline->opcode == ZEND_PRE_DEC && in zend_update_type_info()
2616 (opline->opcode == ZEND_PRE_INC && in zend_update_type_info()
2629 if (opline->opcode == ZEND_POST_INC) { in zend_update_type_info()
2651 if (opline->op1_type == IS_CV) { in zend_update_type_info()
2652 tmp = assign_dim_result_type(t1, t2, OP1_DATA_INFO(), opline->op2_type); in zend_update_type_info()
2664 if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
2685 if ((opline+1)->op1_type == IS_CV && ssa_ops[i+1].op1_def >= 0) { in zend_update_type_info()
2686 opline++; in zend_update_type_info()
2698 if (opline->op1_type == IS_CV) { in zend_update_type_info()
2715 if ((opline+1)->op1_type == IS_CV) { in zend_update_type_info()
2716 opline++; in zend_update_type_info()
2728 if (opline->op2_type == IS_CV && ssa_ops[i].op2_def >= 0) { in zend_update_type_info()
2746 } else if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) { in zend_update_type_info()
2751 if (RETURN_VALUE_USED(opline) && (tmp & MAY_BE_RC1)) { in zend_update_type_info()
2769 if (opline->op2_type == IS_CV) { in zend_update_type_info()
2776 if (opline->op2_type == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION) { in zend_update_type_info()
2796 | (opline->extended_value ? MAY_BE_REF : (MAY_BE_RC1 | MAY_BE_RCN)); in zend_update_type_info()
2802 if ((t1 & (MAY_BE_RC1|MAY_BE_REF)) && (opline->op1_type == IS_CV)) { in zend_update_type_info()
2811 if (opline->extended_value) { in zend_update_type_info()
2882 if (op_array->arg_info && opline->op1.num <= op_array->num_args) { in zend_update_type_info()
2883 arg_info = &op_array->arg_info[opline->op1.num-1]; in zend_update_type_info()
2889 if (opline->opcode == ZEND_RECV_INIT && in zend_update_type_info()
2890 Z_CONSTANT_P(CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants))) { in zend_update_type_info()
2903 if (func_info && (int)opline->op1.num-1 < func_info->num_args) { in zend_update_type_info()
2905 (tmp & func_info->arg_info[opline->op1.num-1].info.type); in zend_update_type_info()
2912 opline->op1.num <= op_array->num_args && in zend_update_type_info()
2913 op_array->arg_info[opline->op1.num-1].class_name == NULL && in zend_update_type_info()
2914 !op_array->arg_info[opline->op1.num-1].type_hint) { in zend_update_type_info()
2920 (int)opline->op1.num-1 < func_info->num_args && in zend_update_type_info()
2921 func_info->arg_info[opline->op1.num-1].info.ce) { in zend_update_type_info()
2923 func_info->arg_info[opline->op1.num-1].info.ce, in zend_update_type_info()
2924 func_info->arg_info[opline->op1.num-1].info.is_instanceof, in zend_update_type_info()
2938 …nd_hash_find_ptr(&script->class_table, Z_STR_P(CRT_CONSTANT_EX(op_array, opline->op1, ssa->rt_cons… in zend_update_type_info()
2944 if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
2945 switch (opline->extended_value & ZEND_FETCH_CLASS_MASK) { in zend_update_type_info()
2965 } else if (opline->op2_type == IS_CONST) { in zend_update_type_info()
2966 zval *zv = CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants); in zend_update_type_info()
2979 if (opline->op1_type == IS_CONST && in zend_update_type_info()
2980 …(ce = get_class_entry(script, Z_STR_P(CRT_CONSTANT_EX(op_array, opline->op1, ssa->rt_constants)+1)… in zend_update_type_info()
2995 if (opline->op1_type == IS_CV && ssa_ops[i].op1_def >= 0) { in zend_update_type_info()
2996 if (opline->extended_value & ZEND_ARRAY_ELEMENT_REF) { in zend_update_type_info()
3018 if (opline->op1_type != IS_UNUSED) { in zend_update_type_info()
3023 if (opline->extended_value & ZEND_ARRAY_ELEMENT_REF) { in zend_update_type_info()
3030 if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
3038 if (opline->op2_type != IS_CONST) { in zend_update_type_info()
3069 if (opline->opcode == ZEND_FE_RESET_RW) { in zend_update_type_info()
3072 if ((t1 & MAY_BE_RC1) && opline->op1_type != IS_TMP_VAR) { in zend_update_type_info()
3079 if (opline->opcode == ZEND_FE_RESET_RW) { in zend_update_type_info()
3092 if (opline->opcode == ZEND_FE_FETCH_RW) { in zend_update_type_info()
3099 if (opline->opcode == ZEND_FE_FETCH_RW) { in zend_update_type_info()
3139 if (opline->opcode == ZEND_FETCH_DIM_W || in zend_update_type_info()
3140 opline->opcode == ZEND_FETCH_DIM_RW || in zend_update_type_info()
3141 opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) { in zend_update_type_info()
3143 if (opline->opcode != ZEND_FETCH_DIM_FUNC_ARG) { in zend_update_type_info()
3150 if (opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) { in zend_update_type_info()
3157 if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
3165 if (opline->op2_type != IS_CONST) { in zend_update_type_info()
3174 } else if (opline->opcode == ZEND_FETCH_DIM_UNSET) { in zend_update_type_info()
3265 opline->opcode != ZEND_FETCH_LIST ? t1 : ((t1 & ~MAY_BE_STRING) | MAY_BE_NULL), in zend_update_type_info()
3266 opline->opcode != ZEND_FETCH_DIM_R && opline->opcode != ZEND_FETCH_DIM_IS in zend_update_type_info()
3267 && opline->opcode != ZEND_FETCH_LIST, in zend_update_type_info()
3268 opline->op2_type == IS_UNUSED); in zend_update_type_info()
3269 if (opline->opcode == ZEND_FETCH_DIM_W || in zend_update_type_info()
3270 opline->opcode == ZEND_FETCH_DIM_RW || in zend_update_type_info()
3271 opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) { in zend_update_type_info()
3274 } else if (opline->op2_type == IS_UNUSED) { in zend_update_type_info()
3279 } else if (opline->opcode == ZEND_FETCH_DIM_IS && (t1 & MAY_BE_STRING)) { in zend_update_type_info()
3296 if (opline->opcode == ZEND_FETCH_OBJ_W || in zend_update_type_info()
3297 opline->opcode == ZEND_FETCH_OBJ_RW || in zend_update_type_info()
3298 opline->opcode == ZEND_FETCH_OBJ_FUNC_ARG) { in zend_update_type_info()
3299 if (opline->opcode != ZEND_FETCH_DIM_FUNC_ARG) { in zend_update_type_info()
3311 if (opline->opcode != ZEND_FETCH_OBJ_R && opline->opcode != ZEND_FETCH_OBJ_IS) { in zend_update_type_info()
3314 if (opline->result_type == IS_TMP_VAR) { in zend_update_type_info()
3333 call_info = func_info->call_map[opline - op_array->opcodes]; in zend_update_type_info()
3391 if (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV)) { in zend_update_type_info()
3420 if (opline->result_type == IS_TMP_VAR) { in zend_update_type_info()
3552 static zend_bool is_narrowable_instr(zend_op *opline) { in is_narrowable_instr() argument
3553 return opline->opcode == ZEND_ADD || opline->opcode == ZEND_SUB in is_narrowable_instr()
3554 || opline->opcode == ZEND_MUL || opline->opcode == ZEND_DIV; in is_narrowable_instr()
3557 static zend_bool is_effective_op1_double_cast(zend_op *opline, zval *op2) { in is_effective_op1_double_cast() argument
3558 return (opline->opcode == ZEND_ADD && Z_LVAL_P(op2) == 0) in is_effective_op1_double_cast()
3559 || (opline->opcode == ZEND_SUB && Z_LVAL_P(op2) == 0) in is_effective_op1_double_cast()
3560 || (opline->opcode == ZEND_MUL && Z_LVAL_P(op2) == 1) in is_effective_op1_double_cast()
3561 || (opline->opcode == ZEND_DIV && Z_LVAL_P(op2) == 1); in is_effective_op1_double_cast()
3563 static zend_bool is_effective_op2_double_cast(zend_op *opline, zval *op1) { in is_effective_op2_double_cast() argument
3566 return (opline->opcode == ZEND_ADD && Z_LVAL_P(op1) == 0) in is_effective_op2_double_cast()
3567 || (opline->opcode == ZEND_SUB && Z_LVAL_P(op1) == 0) in is_effective_op2_double_cast()
3568 || (opline->opcode == ZEND_MUL && Z_LVAL_P(op1) == 1); in is_effective_op2_double_cast()
3604 zend_op *opline = &op_array->opcodes[use]; in can_convert_to_double() local
3607 if (zend_ssa_is_no_val_use(opline, ssa_op, var_num)) { in can_convert_to_double()
3611 if (!is_narrowable_instr(opline)) { in can_convert_to_double()
3643 } else if (opline->op1_type == IS_CONST) { in can_convert_to_double()
3644 zval *zv = CRT_CONSTANT_EX(op_array, opline->op1, ssa->rt_constants); in can_convert_to_double()
3656 } else if (opline->op2_type == IS_CONST) { in can_convert_to_double()
3657 zval *zv = CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants); in can_convert_to_double()
3666 if (opline->opcode == ZEND_MUL && Z_LVAL(orig_op2) == 0) { in can_convert_to_double()
3668 } else if (is_effective_op1_double_cast(opline, &orig_op2)) { in can_convert_to_double()
3674 if (opline->opcode == ZEND_MUL && Z_LVAL(orig_op1) == 0) { in can_convert_to_double()
3676 } else if (is_effective_op2_double_cast(opline, &orig_op1)) { in can_convert_to_double()
3683 if (opline->opcode == ZEND_DIV && zval_get_double(&orig_op2) == 0.0) { in can_convert_to_double()
3687 get_binary_op(opline->opcode)(&orig_result, &orig_op1, &orig_op2); in can_convert_to_double()
3688 get_binary_op(opline->opcode)(&dval_result, &dval_op1, &dval_op2); in can_convert_to_double()
3721 zend_op *opline; in zend_type_narrowing() local
3734 opline = op_array->opcodes + ssa->vars[v].definition; in zend_type_narrowing()
3737 if (opline->opcode == ZEND_ASSIGN && opline->result_type == IS_UNUSED && in zend_type_narrowing()
3738 opline->op1_type == IS_CV && opline->op2_type == IS_CONST) { in zend_type_narrowing()
3739 zval *value = CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants); in zend_type_narrowing()
3770 zend_op *opline) in is_recursive_tail_call() argument
3775 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 && in is_recursive_tail_call()
3776 info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use].definition >= 0) { in is_recursive_tail_call()
3778 …zend_op *op = op_array->opcodes + info->ssa.vars[info->ssa.ops[opline - op_array->opcodes].op1_use… in is_recursive_tail_call()
3841 zend_op *opline = op_array->opcodes + blocks[j].start + blocks[j].len - 1; in zend_func_return_info() local
3843 if (opline->opcode == ZEND_RETURN || opline->opcode == ZEND_RETURN_BY_REF) { in zend_func_return_info()
3847 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 && in zend_func_return_info()
3848 info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].recursive) { in zend_func_return_info()
3851 if (is_recursive_tail_call(op_array, opline)) { in zend_func_return_info()
3858 if (opline->opcode == ZEND_RETURN) { in zend_func_return_info()
3871 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0 && in zend_func_return_info()
3872 info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].ce) { in zend_func_return_info()
3873 arg_ce = info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].ce; in zend_func_return_info()
3874 …arg_is_instanceof = info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].is_insta… in zend_func_return_info()
3892 if (opline->op1_type == IS_CONST) { in zend_func_return_info()
3893 zval *zv = CRT_CONSTANT_EX(op_array, opline->op1, info->ssa.rt_constants); in zend_func_return_info()
3960 info->ssa.ops[opline - op_array->opcodes].op1_use >= 0) { in zend_func_return_info()
3961 if (info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].has_range) { in zend_func_return_info()
3964 tmp_range = info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].range; in zend_func_return_info()
3967 if (info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].range.underflow) { in zend_func_return_info()
3971 …tmp_range.min = MIN(tmp_range.min, info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op… in zend_func_return_info()
3973 if (info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op1_use].range.overflow) { in zend_func_return_info()
3977 …tmp_range.max = MAX(tmp_range.max, info->ssa.var_info[info->ssa.ops[opline - op_array->opcodes].op… in zend_func_return_info()
4115 int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa) in zend_may_throw() argument
4120 if (opline->op1_type == IS_CV) { in zend_may_throw()
4122 switch (opline->opcode) { in zend_may_throw()
4143 } else if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { in zend_may_throw()
4145 switch (opline->opcode) { in zend_may_throw()
4168 if (opline->op2_type == IS_CV) { in zend_may_throw()
4170 switch (opline->opcode) { in zend_may_throw()
4178 } else if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) { in zend_may_throw()
4180 switch (opline->opcode) { in zend_may_throw()
4190 switch (opline->opcode) { in zend_may_throw()
4219 if ((opline+1)->opcode == ZEND_BIND_GLOBAL) { in zend_may_throw()
4220 return zend_may_throw(opline + 1, op_array, ssa); in zend_may_throw()
4291 if (opline->extended_value != 0) { in zend_may_throw()
4302 if (opline->extended_value != 0) { in zend_may_throw()
4314 if (opline->extended_value != 0) { in zend_may_throw()
4321 if (opline->extended_value != 0) { in zend_may_throw()
4329 if (opline->extended_value != 0) { in zend_may_throw()
4337 if (opline->extended_value != 0) { in zend_may_throw()
4350 …MAY_BE_RESOURCE|MAY_BE_TRUE|MAY_BE_STRING|MAY_BE_LONG|MAY_BE_DOUBLE)) || opline->op2_type == IS_UN… in zend_may_throw()
4358 return (opline->op2_type != IS_UNUSED) && (t2 & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); in zend_may_throw()
4364 if (Z_CONSTANT_P(CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants))) { in zend_may_throw()
4368 uint32_t arg_num = opline->op1.num; in zend_may_throw()
4389 switch (opline->extended_value) { in zend_may_throw()