Lines Matching refs:ssa_op

458 	CHECK_OP_TRACE_TYPE(opline->op1.var, ssa_op->op1_use, op1_info, op1_type)
460 CHECK_OP_TRACE_TYPE(opline->op2.var, ssa_op->op2_use, op2_info, op2_type)
462 CHECK_OP_TRACE_TYPE((opline+1)->op1.var, (ssa_op+1)->op1_use, op1_data_info, op3_type)
985 static int find_return_ssa_var(zend_jit_trace_rec *p, zend_ssa_op *ssa_op) in find_return_ssa_var() argument
993 return ssa_op->result_def; in find_return_ssa_var()
2712 const zend_ssa_op *ssa_op; in zend_jit_trace_allocate_registers() local
2813 ssa_op = ssa->ops; in zend_jit_trace_allocate_registers()
2822 zend_jit_opline_supports_reg(op_array, ssa, opline, ssa_op, p); in zend_jit_trace_allocate_registers()
2827 && ssa_op->op1_def >= 0 in zend_jit_trace_allocate_registers()
2828 && ssa->vars[ssa_op->op1_def].alias != NO_ALIAS) { in zend_jit_trace_allocate_registers()
2833 if (ssa_op->op1_use >= 0 in zend_jit_trace_allocate_registers()
2834 && start[ssa_op->op1_use] >= 0 in zend_jit_trace_allocate_registers()
2835 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { in zend_jit_trace_allocate_registers()
2837 …zend_jit_trace_use_var(idx, ssa_op->op1_use, ssa_op->op1_def, ssa_op->op1_use_chain, start, end, f… in zend_jit_trace_allocate_registers()
2853 flags[ssa_op->op1_use] |= ZREG_STORE; in zend_jit_trace_allocate_registers()
2855 flags[ssa_op->op1_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2859 start[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2860 end[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2864 if (ssa_op->op2_use >= 0 in zend_jit_trace_allocate_registers()
2865 && ssa_op->op2_use != ssa_op->op1_use in zend_jit_trace_allocate_registers()
2866 && start[ssa_op->op2_use] >= 0 in zend_jit_trace_allocate_registers()
2867 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op2_use)) { in zend_jit_trace_allocate_registers()
2869 …zend_jit_trace_use_var(idx, ssa_op->op2_use, ssa_op->op2_def, ssa_op->op2_use_chain, start, end, f… in zend_jit_trace_allocate_registers()
2871 flags[ssa_op->op2_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2874 start[ssa_op->op2_use] = -1; in zend_jit_trace_allocate_registers()
2875 end[ssa_op->op2_use] = -1; in zend_jit_trace_allocate_registers()
2879 if (ssa_op->result_use >= 0 in zend_jit_trace_allocate_registers()
2880 && ssa_op->result_use != ssa_op->op1_use in zend_jit_trace_allocate_registers()
2881 && ssa_op->result_use != ssa_op->op2_use in zend_jit_trace_allocate_registers()
2882 && start[ssa_op->result_use] >= 0 in zend_jit_trace_allocate_registers()
2883 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->result_use)) { in zend_jit_trace_allocate_registers()
2885 …zend_jit_trace_use_var(idx, ssa_op->result_use, ssa_op->result_def, ssa_op->res_use_chain, start, … in zend_jit_trace_allocate_registers()
2887 start[ssa_op->result_use] = -1; in zend_jit_trace_allocate_registers()
2888 end[ssa_op->result_use] = -1; in zend_jit_trace_allocate_registers()
2893 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
2895 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
2897 if (ssa_op->op2_def >= 0) { in zend_jit_trace_allocate_registers()
2899 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op2.var), ssa_op->op2_def); in zend_jit_trace_allocate_registers()
2901 if (ssa_op->result_def >= 0) { in zend_jit_trace_allocate_registers()
2903 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->result.var), ssa_op->result_def); in zend_jit_trace_allocate_registers()
2907 if (ssa_op->result_def >= 0 in zend_jit_trace_allocate_registers()
2908 && (ssa->vars[ssa_op->result_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2909 || ssa->vars[ssa_op->result_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2910 && ssa->vars[ssa_op->result_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2911 && zend_jit_var_supports_reg(ssa, ssa_op->result_def)) { in zend_jit_trace_allocate_registers()
2912 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace_allocate_registers()
2922 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_DOUBLE) in zend_jit_trace_allocate_registers()
2924 start[ssa_op->result_def] = idx; in zend_jit_trace_allocate_registers()
2925 vars_op_array[ssa_op->result_def] = op_array; in zend_jit_trace_allocate_registers()
2930 if (ssa_op->op1_def >= 0 in zend_jit_trace_allocate_registers()
2931 && (ssa->vars[ssa_op->op1_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2932 || ssa->vars[ssa_op->op1_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2933 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2934 && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { in zend_jit_trace_allocate_registers()
2935 start[ssa_op->op1_def] = idx; in zend_jit_trace_allocate_registers()
2936 vars_op_array[ssa_op->op1_def] = op_array; in zend_jit_trace_allocate_registers()
2939 if (ssa_op->op2_def >= 0 in zend_jit_trace_allocate_registers()
2940 && (ssa->vars[ssa_op->op2_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2941 || ssa->vars[ssa_op->op2_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2942 && ssa->vars[ssa_op->op2_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2943 && zend_jit_var_supports_reg(ssa, ssa_op->op2_def)) { in zend_jit_trace_allocate_registers()
2944 start[ssa_op->op2_def] = idx; in zend_jit_trace_allocate_registers()
2945 vars_op_array[ssa_op->op2_def] = op_array; in zend_jit_trace_allocate_registers()
2961 ssa_op++; in zend_jit_trace_allocate_registers()
2963 if (ssa_op->op1_use >= 0 in zend_jit_trace_allocate_registers()
2964 && start[ssa_op->op1_use] >= 0 in zend_jit_trace_allocate_registers()
2965 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { in zend_jit_trace_allocate_registers()
2967 …zend_jit_trace_use_var(idx, ssa_op->op1_use, ssa_op->op1_def, ssa_op->op1_use_chain, start, end, f… in zend_jit_trace_allocate_registers()
2969 flags[ssa_op->op1_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2972 start[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2973 end[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2977 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
2979 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
2981 && (ssa->vars[ssa_op->op1_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2982 || ssa->vars[ssa_op->op1_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2983 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2984 && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { in zend_jit_trace_allocate_registers()
2985 start[ssa_op->op1_def] = idx; in zend_jit_trace_allocate_registers()
2986 vars_op_array[ssa_op->op1_def] = op_array; in zend_jit_trace_allocate_registers()
2990 ssa_op++; in zend_jit_trace_allocate_registers()
2995 ssa_op++; in zend_jit_trace_allocate_registers()
3000 if (ssa_op->result_def >= 0) { in zend_jit_trace_allocate_registers()
3002 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->result.var), ssa_op->result_def); in zend_jit_trace_allocate_registers()
3004 ssa_op++; in zend_jit_trace_allocate_registers()
3010 ssa_op++; in zend_jit_trace_allocate_registers()
3015 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
3017 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
3019 ssa_op++; in zend_jit_trace_allocate_registers()
3025 ssa_op += len; in zend_jit_trace_allocate_registers()
3462 …k(zend_jit_trace_stack *stack, const zend_op *opline, const zend_ssa_op *ssa_op, const zend_ssa *s… in zend_jit_trace_clenup_stack() argument
3464 uint32_t line = ssa_op - ssa->ops; in zend_jit_trace_clenup_stack()
3466 if (ssa_op->op1_use >= 0 in zend_jit_trace_clenup_stack()
3467 && ra[ssa_op->op1_use] in zend_jit_trace_clenup_stack()
3468 && ra[ssa_op->op1_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3471 if (ssa_op->op2_use >= 0 in zend_jit_trace_clenup_stack()
3472 && ra[ssa_op->op2_use] in zend_jit_trace_clenup_stack()
3473 && ra[ssa_op->op2_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3476 if (ssa_op->result_use >= 0 in zend_jit_trace_clenup_stack()
3477 && ra[ssa_op->result_use] in zend_jit_trace_clenup_stack()
3478 && ra[ssa_op->result_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3499 …nst zend_op_array *op_array, zend_ssa *ssa, const zend_op **ssa_opcodes, const zend_ssa_op *ssa_op) in zend_jit_may_delay_fetch_this() argument
3501 int var = ssa_op->result_def; in zend_jit_may_delay_fetch_this()
3745 static void zend_jit_trace_update_condition_ranges(const zend_op *opline, const zend_ssa_op *ssa_op in zend_jit_trace_update_condition_ranges() argument
3767 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3769 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3773 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3775 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3784 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3786 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3790 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3792 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3801 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3803 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3807 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3809 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3815 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3817 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3821 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3823 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3832 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3834 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3838 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3840 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3846 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3848 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3852 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3854 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3863 static bool zend_jit_may_skip_comparison(const zend_op *opline, const zend_ssa_op *ssa_op, const ze… in zend_jit_may_skip_comparison() argument
3870 if (ssa_op->op2_use >= 0) { in zend_jit_may_skip_comparison()
3871 if ((ssa_op-1)->op1_def == ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3872 ssa_op--; in zend_jit_may_skip_comparison()
3873 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3881 } else if ((ssa_op-1)->result_def == ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3882 ssa_op--; in zend_jit_may_skip_comparison()
3883 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3895 if (ssa_op->op1_use >= 0) { in zend_jit_may_skip_comparison()
3896 if ((ssa_op-1)->op1_def == ssa_op->op1_use) { in zend_jit_may_skip_comparison()
3897 ssa_op--; in zend_jit_may_skip_comparison()
3898 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3906 } else if ((ssa_op-1)->result_def == ssa_op->op1_use) { in zend_jit_may_skip_comparison()
3907 ssa_op--; in zend_jit_may_skip_comparison()
3908 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3918 const zend_ssa_op *prev_ssa_op = ssa_op - 1; in zend_jit_may_skip_comparison()
3929 if (ssa_op->op1_use == prev_ssa_op->op1_use in zend_jit_may_skip_comparison()
3930 && ssa_op->op2_use == prev_ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3939 if (ssa_op->op1_use < 0) { in zend_jit_may_skip_comparison()
3944 if (ssa_op->op2_use < 0) { in zend_jit_may_skip_comparison()
4020 const zend_ssa_op *ssa_op, *orig_ssa_op; in zend_jit_trace() local
4292 ssa_op = (JIT_G(opt_level) >= ZEND_JIT_LEVEL_INLINE) ? ssa->ops : NULL; in zend_jit_trace()
4383 … (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4384 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4389 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4391 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4397 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4436 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4454 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4457 if (ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
4458 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
4469 !ssa->var_info[ssa_op->op2_use].guarded_reference, 1)) { in zend_jit_trace()
4472 if (ssa->vars[ssa_op->op2_use].alias == NO_ALIAS) { in zend_jit_trace()
4473 ssa->var_info[ssa_op->op2_use].guarded_reference = 1; in zend_jit_trace()
4515 …) && (res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4516 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4523 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4550 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4574 … (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4575 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4581 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4583 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4607 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4617 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4621 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4622 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4635 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
4659 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4660 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4672 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4680 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4684 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4685 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4694 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4695 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4704 } else if (ssa_op->op1_use >= 0 && ssa->vars[ssa_op->op1_use].definition >= 0) { in zend_jit_trace()
4705 on_this = ssa_opcodes[ssa->vars[ssa_op->op1_use].definition]->opcode == ZEND_FETCH_THIS; in zend_jit_trace()
4713 if (!zend_jit_incdec_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4750 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4751 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4763 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4771 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4775 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4776 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4785 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4786 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4795 } else if (ssa_op->op1_use >= 0 && ssa->vars[ssa_op->op1_use].definition >= 0) { in zend_jit_trace()
4796 on_this = ssa_opcodes[ssa->vars[ssa_op->op1_use].definition]->opcode == ZEND_FETCH_THIS; in zend_jit_trace()
4806 if (!zend_jit_assign_obj_op(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4830 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4831 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4843 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4851 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4855 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4856 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4865 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4866 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4875 } else if (ssa_op->op1_use >= 0 && ssa->vars[ssa_op->op1_use].definition >= 0) { in zend_jit_trace()
4876 on_this = ssa_opcodes[ssa->vars[ssa_op->op1_use].definition]->opcode == ZEND_FETCH_THIS; in zend_jit_trace()
4886 if (!zend_jit_assign_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4890 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4894 && (ssa_op+1)->op1_def >= 0 in zend_jit_trace()
4895 && ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4896 …ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_… in zend_jit_trace()
4913 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4923 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4927 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4928 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4939 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
4943 && (ssa_op+1)->op1_def >= 0 in zend_jit_trace()
4944 && ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4945 …ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_… in zend_jit_trace()
4955 … if (ssa_op->op2_def < 0 || (Z_MODE(op2_addr) == IS_REG && ssa->vars[ssa_op->op2_def].no_val)) { in zend_jit_trace()
4985 !ssa->var_info[ssa_op->op1_use].guarded_reference, 0)) { in zend_jit_trace()
4989 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4990 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5038 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
5041 if (ssa_op->op2_def >= 0 in zend_jit_trace()
5043 && ssa->vars[ssa_op->op2_def].no_val) { in zend_jit_trace()
5048 && ssa->vars[ssa_op->op2_def].use_chain < 0 in zend_jit_trace()
5049 && !ssa->vars[ssa_op->op2_def].phi_use_chain) { in zend_jit_trace()
5057 && ssa_op->op2_def >= 0 in zend_jit_trace()
5058 && ssa->vars[ssa_op->op2_def].alias == NO_ALIAS) { in zend_jit_trace()
5059 …ssa->var_info[ssa_op->op2_def].guarded_reference = ssa->var_info[ssa_op->op2_use].guarded_referenc… in zend_jit_trace()
5069 … if (ssa_op->op1_def < 0 || (Z_MODE(op1_addr) == IS_REG && ssa->vars[ssa_op->op1_def].no_val)) { in zend_jit_trace()
5091 if (ssa_op->op1_def >= 0 in zend_jit_trace()
5093 && ssa->vars[ssa_op->op1_def].no_val) { in zend_jit_trace()
5098 && ssa->vars[ssa_op->op1_def].use_chain < 0 in zend_jit_trace()
5099 && !ssa->vars[ssa_op->op1_def].phi_use_chain) { in zend_jit_trace()
5107 && ssa_op->op1_def >= 0 in zend_jit_trace()
5108 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5109 …ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_referenc… in zend_jit_trace()
5116 …? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level… in zend_jit_trace()
5158 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5159 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5177 … if (ssa_op->op1_def < 0 || (Z_MODE(op1_addr) == IS_REG && ssa->vars[ssa_op->op1_def].no_val)) { in zend_jit_trace()
5188 if (ssa_op->op1_def >= 0 in zend_jit_trace()
5190 && ssa->vars[ssa_op->op1_def].no_val) { in zend_jit_trace()
5195 && ssa->vars[ssa_op->op1_def].use_chain < 0 in zend_jit_trace()
5196 && !ssa->vars[ssa_op->op1_def].phi_use_chain) { in zend_jit_trace()
5204 && ssa_op->op1_def >= 0 in zend_jit_trace()
5205 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5206 …ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_referenc… in zend_jit_trace()
5263 ssa_op != ssa->ops && in zend_jit_trace()
5266 zend_jit_may_skip_comparison(opline, ssa_op, ssa, ssa_opcodes, op_array); in zend_jit_trace()
5275 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5287 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5291 zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); in zend_jit_trace()
5299 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5311 ssa_op != ssa->ops && in zend_jit_trace()
5314 zend_jit_may_skip_comparison(opline, ssa_op, ssa, ssa_opcodes, op_array); in zend_jit_trace()
5323 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5338 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5342 zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); in zend_jit_trace()
5350 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5388 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5417 …if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array… in zend_jit_trace()
5486 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5521 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5557 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5572 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5576 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5577 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5648 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5652 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5653 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5654 if (ssa_op->op1_def >= 0) { in zend_jit_trace()
5655 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5665 ssa_op->op1_use >= 0 && in zend_jit_trace()
5666 ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5668 ssa->var_info[ssa_op->op1_use].type &= ~MAY_BE_PACKED_GUARD; in zend_jit_trace()
5678 … ssa->var_info[ssa_op->op1_use].type &= ~(MAY_BE_ARRAY_NUMERIC_HASH|MAY_BE_ARRAY_STRING_HASH); in zend_jit_trace()
5683 ssa->var_info[ssa_op->op1_use].type &= ~MAY_BE_ARRAY_PACKED; in zend_jit_trace()
5687 if (!zend_jit_fetch_dim_read(&dasm_state, opline, ssa, ssa_op, in zend_jit_trace()
5692 if (ssa_op->op1_def >= 0 && op1_type != IS_UNKNOWN) { in zend_jit_trace()
5693 ssa->var_info[ssa_op->op1_def].type = ssa->var_info[ssa_op->op1_use].type; in zend_jit_trace()
5711 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
5721 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5725 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5726 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5738 if (ssa_op->result_def >= 0 in zend_jit_trace()
5742 ssa->var_info[ssa_op->result_def].indirect_reference = 1; in zend_jit_trace()
5755 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5759 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5760 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5773 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5775 if (ssa_op->op1_use >= 0 in zend_jit_trace()
5776 && ssa->var_info[ssa_op->op1_use].avoid_refcounting) { in zend_jit_trace()
5797 ssa_op->op1_use >= 0 && in zend_jit_trace()
5798 ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5800 ssa->var_info[ssa_op->op1_use].type &= ~MAY_BE_PACKED_GUARD; in zend_jit_trace()
5816 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), in zend_jit_trace()
5861 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
5869 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5873 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5874 … ssa->var_info[ssa_op->op1_def >= 0 ? ssa_op->op1_def : ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5883 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5884 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
5891 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5892 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
5893 avoid_refcounting = ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5897 } else if (ssa_op->op1_use >= 0 && ssa->vars[ssa_op->op1_use].definition >= 0) { in zend_jit_trace()
5898 on_this = ssa_opcodes[ssa->vars[ssa_op->op1_use].definition]->opcode == ZEND_FETCH_THIS; in zend_jit_trace()
5906 if (!zend_jit_fetch_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
5909 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, MAY_BE_STRING))) { in zend_jit_trace()
5915 orig_ssa_op = ssa_op; in zend_jit_trace()
5922 if (ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5923 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5930 ssa_op++; in zend_jit_trace()
5936 ssa_op = orig_ssa_op; in zend_jit_trace()
5945 orig_ssa_op = ssa_op; in zend_jit_trace()
5949 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
5954 ssa_op++; in zend_jit_trace()
5960 ssa_op = orig_ssa_op; in zend_jit_trace()
5966 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
5985 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5989 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5990 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
6007 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
6011 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
6012 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
6020 …tate, opline, op1_info, op1_addr, RES_REG_ADDR(), zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
6026 if (ssa_op->result_def >= 0 && opline->result_type != IS_CV) { in zend_jit_trace()
6027 if (zend_jit_may_delay_fetch_this(op_array, ssa, ssa_opcodes, ssa_op)) { in zend_jit_trace()
6028 ssa->var_info[ssa_op->result_def].delayed_fetch_this = 1; in zend_jit_trace()
6110 if (!zend_jit_fetch_constant(&dasm_state, opline, op_array, ssa, ssa_op, RES_REG_ADDR())) { in zend_jit_trace()
6137 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
6141 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
6142 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
6148 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
6149 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
6156 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
6157 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
6161 } else if (ssa_op->op1_use >= 0 && ssa->vars[ssa_op->op1_use].definition >= 0) { in zend_jit_trace()
6162 on_this = ssa_opcodes[ssa->vars[ssa_op->op1_use].definition]->opcode == ZEND_FETCH_THIS; in zend_jit_trace()
6173 op_array, ssa, ssa_op, frame->call_level, in zend_jit_trace()
6186 …? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level… in zend_jit_trace()
6225 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), p + 1)) { in zend_jit_trace()
6253 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
6274 if (ssa_op) { in zend_jit_trace()
6278 if (ssa_op->result_def >= 0) { in zend_jit_trace()
6285 } else if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace()
6286 && has_concrete_type(ssa->var_info[ssa_op->result_def].type)) { in zend_jit_trace()
6287 type = concrete_type(ssa->var_info[ssa_op->result_def].type); in zend_jit_trace()
6295 && ssa_op->op1_use >= 0 in zend_jit_trace()
6297 && (ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF) == 0) { in zend_jit_trace()
6316 (gen_handler || type == IS_UNKNOWN || !ra || !ra[ssa_op->result_def])); in zend_jit_trace()
6317 if (ssa->var_info[ssa_op->result_def].type & MAY_BE_INDIRECT) { in zend_jit_trace()
6321 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6325 } else if (ssa->var_info[ssa_op->result_def].avoid_refcounting) { in zend_jit_trace()
6327 } else if (ra && ra[ssa_op->result_def]) { in zend_jit_trace()
6328 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, in zend_jit_trace()
6329 ra[ssa_op->result_def]->flags & ZREG_STORE); in zend_jit_trace()
6335 && zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->result_def, &tmp)) { in zend_jit_trace()
6336 ssa->var_info[ssa_op->result_def].range.min = tmp.min; in zend_jit_trace()
6337 ssa->var_info[ssa_op->result_def].range.max = tmp.max; in zend_jit_trace()
6338 ssa->var_info[ssa_op->result_def].range.underflow = 0; in zend_jit_trace()
6339 ssa->var_info[ssa_op->result_def].range.overflow = 0; in zend_jit_trace()
6340 ssa->var_info[ssa_op->result_def].has_range = 1; in zend_jit_trace()
6343 if (ssa_op->op1_def >= 0 in zend_jit_trace()
6349 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6350 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6351 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6372 (!ra[ssa_op->op1_def] && in zend_jit_trace()
6373 !(ssa->vars[ssa_op->op1_def].no_val && in zend_jit_trace()
6382 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6383 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6384 uint8_t flags = ra[ssa_op->op1_def]->flags & ZREG_STORE; in zend_jit_trace()
6386 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
6394 if (!ra[ssa_op->op1_use]) { in zend_jit_trace()
6399 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, flags); in zend_jit_trace()
6403 && zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op1_def, &tmp)) { in zend_jit_trace()
6404 ssa->var_info[ssa_op->op1_def].range.min = tmp.min; in zend_jit_trace()
6405 ssa->var_info[ssa_op->op1_def].range.max = tmp.max; in zend_jit_trace()
6406 ssa->var_info[ssa_op->op1_def].range.underflow = 0; in zend_jit_trace()
6407 ssa->var_info[ssa_op->op1_def].range.overflow = 0; in zend_jit_trace()
6408 ssa->var_info[ssa_op->op1_def].has_range = 1; in zend_jit_trace()
6411 if (ssa_op->op2_def >= 0 in zend_jit_trace()
6417 if (!(ssa->var_info[ssa_op->op2_def].type & MAY_BE_GUARD) in zend_jit_trace()
6418 && has_concrete_type(ssa->var_info[ssa_op->op2_def].type)) { in zend_jit_trace()
6419 type = concrete_type(ssa->var_info[ssa_op->op2_def].type); in zend_jit_trace()
6426 (!ra[ssa_op->op2_def] && in zend_jit_trace()
6427 !(ssa->vars[ssa_op->op2_def].no_val && in zend_jit_trace()
6431 ssa->var_info[ssa_op->op2_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6432 if (ra && ra[ssa_op->op2_def]) { in zend_jit_trace()
6433 uint8_t flags = ra[ssa_op->op2_def]->flags & ZREG_STORE; in zend_jit_trace()
6435 if (ssa_op->op2_use >= 0) { in zend_jit_trace()
6437 if (!ra[ssa_op->op2_use] in zend_jit_trace()
6438 || ra[ssa_op->op2_use]->reg != ra[ssa_op->op2_def]->reg) { in zend_jit_trace()
6443 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op2.var), ra[ssa_op->op2_def]->reg, flags); in zend_jit_trace()
6447 && zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op2_def, &tmp)) { in zend_jit_trace()
6448 ssa->var_info[ssa_op->op2_def].range.min = tmp.min; in zend_jit_trace()
6449 ssa->var_info[ssa_op->op2_def].range.max = tmp.max; in zend_jit_trace()
6450 ssa->var_info[ssa_op->op2_def].range.underflow = 0; in zend_jit_trace()
6451 ssa->var_info[ssa_op->op2_def].range.overflow = 0; in zend_jit_trace()
6452 ssa->var_info[ssa_op->op2_def].has_range = 1; in zend_jit_trace()
6466 ssa_op++; in zend_jit_trace()
6468 if (ssa_op->op1_def >= 0) { in zend_jit_trace()
6471 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6472 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6473 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6481 (gen_handler || type == IS_UNKNOWN || !ra || !ra[ssa_op->op1_def])); in zend_jit_trace()
6483 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6484 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6485 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, in zend_jit_trace()
6486 ra[ssa_op->op1_def]->flags & ZREG_STORE); in zend_jit_trace()
6490 && zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op1_def, &tmp)) { in zend_jit_trace()
6491 ssa->var_info[ssa_op->op1_def].range.min = tmp.min; in zend_jit_trace()
6492 ssa->var_info[ssa_op->op1_def].range.max = tmp.max; in zend_jit_trace()
6493 ssa->var_info[ssa_op->op1_def].range.underflow = 0; in zend_jit_trace()
6494 ssa->var_info[ssa_op->op1_def].range.overflow = 0; in zend_jit_trace()
6495 ssa->var_info[ssa_op->op1_def].has_range = 1; in zend_jit_trace()
6498 ssa_op++; in zend_jit_trace()
6501 ssa_op++; in zend_jit_trace()
6504 if (ssa_op->result_def >= 0) { in zend_jit_trace()
6507 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace()
6508 && has_concrete_type(ssa->var_info[ssa_op->result_def].type)) { in zend_jit_trace()
6509 type = concrete_type(ssa->var_info[ssa_op->result_def].type); in zend_jit_trace()
6512 (gen_handler || !ra || !ra[ssa_op->result_def])); in zend_jit_trace()
6513 if (ra && ra[ssa_op->result_def]) { in zend_jit_trace()
6514 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, in zend_jit_trace()
6515 ra[ssa_op->result_def]->flags & ZREG_STORE); in zend_jit_trace()
6518 ssa_op++; in zend_jit_trace()
6523 ssa_op++; in zend_jit_trace()
6526 if (ssa_op->op1_def >= 0) { in zend_jit_trace()
6529 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6530 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6531 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6534 (gen_handler || !ra || !ra[ssa_op->op1_def])); in zend_jit_trace()
6535 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6536 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, in zend_jit_trace()
6537 ra[ssa_op->op1_def]->flags & ZREG_STORE); in zend_jit_trace()
6540 ssa_op++; in zend_jit_trace()
6545 ssa_op += zend_jit_trace_op_len(opline); in zend_jit_trace()
6550 ssa_op++; in zend_jit_trace()
6719 && ssa_op in zend_jit_trace()
6720 && (ssa_op-1)->op1_use >=0 in zend_jit_trace()
6721 && ssa->var_info[(ssa_op-1)->op1_use].delayed_fetch_this)) in zend_jit_trace()