Lines Matching refs:ssa_op

429 	CHECK_OP_TRACE_TYPE(opline->op1.var, ssa_op->op1_use, op1_info, op1_type)
431 CHECK_OP_TRACE_TYPE(opline->op2.var, ssa_op->op2_use, op2_info, op2_type)
433 CHECK_OP_TRACE_TYPE((opline+1)->op1.var, (ssa_op+1)->op1_use, op1_data_info, op3_type)
875 static int find_return_ssa_var(zend_jit_trace_rec *p, zend_ssa_op *ssa_op) in find_return_ssa_var() argument
883 return ssa_op->result_def; in find_return_ssa_var()
2429 const zend_ssa_op *ssa_op; in zend_jit_trace_allocate_registers() local
2530 ssa_op = ssa->ops; in zend_jit_trace_allocate_registers()
2539 zend_jit_opline_supports_reg(op_array, ssa, opline, ssa_op, p); in zend_jit_trace_allocate_registers()
2544 && ssa_op->op1_def >= 0 in zend_jit_trace_allocate_registers()
2545 && ssa->vars[ssa_op->op1_def].alias != NO_ALIAS) { in zend_jit_trace_allocate_registers()
2550 if (ssa_op->op1_use >= 0 in zend_jit_trace_allocate_registers()
2551 && start[ssa_op->op1_use] >= 0 in zend_jit_trace_allocate_registers()
2552 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { in zend_jit_trace_allocate_registers()
2554 …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()
2570 flags[ssa_op->op1_use] |= ZREG_STORE; in zend_jit_trace_allocate_registers()
2572 flags[ssa_op->op1_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2576 start[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2577 end[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2581 if (ssa_op->op2_use >= 0 in zend_jit_trace_allocate_registers()
2582 && ssa_op->op2_use != ssa_op->op1_use in zend_jit_trace_allocate_registers()
2583 && start[ssa_op->op2_use] >= 0 in zend_jit_trace_allocate_registers()
2584 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op2_use)) { in zend_jit_trace_allocate_registers()
2586 …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()
2588 flags[ssa_op->op2_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2591 start[ssa_op->op2_use] = -1; in zend_jit_trace_allocate_registers()
2592 end[ssa_op->op2_use] = -1; in zend_jit_trace_allocate_registers()
2596 if (ssa_op->result_use >= 0 in zend_jit_trace_allocate_registers()
2597 && ssa_op->result_use != ssa_op->op1_use in zend_jit_trace_allocate_registers()
2598 && ssa_op->result_use != ssa_op->op2_use in zend_jit_trace_allocate_registers()
2599 && start[ssa_op->result_use] >= 0 in zend_jit_trace_allocate_registers()
2600 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->result_use)) { in zend_jit_trace_allocate_registers()
2602 …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()
2604 start[ssa_op->result_use] = -1; in zend_jit_trace_allocate_registers()
2605 end[ssa_op->result_use] = -1; in zend_jit_trace_allocate_registers()
2610 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
2612 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
2614 if (ssa_op->op2_def >= 0) { in zend_jit_trace_allocate_registers()
2616 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op2.var), ssa_op->op2_def); in zend_jit_trace_allocate_registers()
2618 if (ssa_op->result_def >= 0) { in zend_jit_trace_allocate_registers()
2620 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->result.var), ssa_op->result_def); in zend_jit_trace_allocate_registers()
2624 if (ssa_op->result_def >= 0 in zend_jit_trace_allocate_registers()
2625 && (ssa->vars[ssa_op->result_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2626 || ssa->vars[ssa_op->result_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2627 && ssa->vars[ssa_op->result_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2628 && zend_jit_var_supports_reg(ssa, ssa_op->result_def)) { in zend_jit_trace_allocate_registers()
2629 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace_allocate_registers()
2638 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_DOUBLE) in zend_jit_trace_allocate_registers()
2640 start[ssa_op->result_def] = idx; in zend_jit_trace_allocate_registers()
2641 vars_op_array[ssa_op->result_def] = op_array; in zend_jit_trace_allocate_registers()
2646 if (ssa_op->op1_def >= 0 in zend_jit_trace_allocate_registers()
2647 && (ssa->vars[ssa_op->op1_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2648 || ssa->vars[ssa_op->op1_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2649 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2650 && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { in zend_jit_trace_allocate_registers()
2651 start[ssa_op->op1_def] = idx; in zend_jit_trace_allocate_registers()
2652 vars_op_array[ssa_op->op1_def] = op_array; in zend_jit_trace_allocate_registers()
2655 if (ssa_op->op2_def >= 0 in zend_jit_trace_allocate_registers()
2656 && (ssa->vars[ssa_op->op2_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2657 || ssa->vars[ssa_op->op2_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2658 && ssa->vars[ssa_op->op2_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2659 && zend_jit_var_supports_reg(ssa, ssa_op->op2_def)) { in zend_jit_trace_allocate_registers()
2660 start[ssa_op->op2_def] = idx; in zend_jit_trace_allocate_registers()
2661 vars_op_array[ssa_op->op2_def] = op_array; in zend_jit_trace_allocate_registers()
2677 ssa_op++; in zend_jit_trace_allocate_registers()
2679 if (ssa_op->op1_use >= 0 in zend_jit_trace_allocate_registers()
2680 && start[ssa_op->op1_use] >= 0 in zend_jit_trace_allocate_registers()
2681 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { in zend_jit_trace_allocate_registers()
2683 …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()
2685 flags[ssa_op->op1_use] |= ZREG_LAST_USE; in zend_jit_trace_allocate_registers()
2688 start[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2689 end[ssa_op->op1_use] = -1; in zend_jit_trace_allocate_registers()
2693 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
2695 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
2697 && (ssa->vars[ssa_op->op1_def].use_chain >= 0 in zend_jit_trace_allocate_registers()
2698 || ssa->vars[ssa_op->op1_def].phi_use_chain) in zend_jit_trace_allocate_registers()
2699 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS in zend_jit_trace_allocate_registers()
2700 && zend_jit_var_supports_reg(ssa, ssa_op->op1_def)) { in zend_jit_trace_allocate_registers()
2701 start[ssa_op->op1_def] = idx; in zend_jit_trace_allocate_registers()
2702 vars_op_array[ssa_op->op1_def] = op_array; in zend_jit_trace_allocate_registers()
2706 ssa_op++; in zend_jit_trace_allocate_registers()
2711 ssa_op++; in zend_jit_trace_allocate_registers()
2716 if (ssa_op->result_def >= 0) { in zend_jit_trace_allocate_registers()
2718 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->result.var), ssa_op->result_def); in zend_jit_trace_allocate_registers()
2720 ssa_op++; in zend_jit_trace_allocate_registers()
2726 ssa_op++; in zend_jit_trace_allocate_registers()
2731 if (ssa_op->op1_def >= 0) { in zend_jit_trace_allocate_registers()
2733 SET_STACK_VAR(stack, EX_VAR_TO_NUM(opline->op1.var), ssa_op->op1_def); in zend_jit_trace_allocate_registers()
2735 ssa_op++; in zend_jit_trace_allocate_registers()
2741 ssa_op += len; in zend_jit_trace_allocate_registers()
3178 …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
3180 uint32_t line = ssa_op - ssa->ops; in zend_jit_trace_clenup_stack()
3182 if (ssa_op->op1_use >= 0 in zend_jit_trace_clenup_stack()
3183 && ra[ssa_op->op1_use] in zend_jit_trace_clenup_stack()
3184 && ra[ssa_op->op1_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3187 if (ssa_op->op2_use >= 0 in zend_jit_trace_clenup_stack()
3188 && ra[ssa_op->op2_use] in zend_jit_trace_clenup_stack()
3189 && ra[ssa_op->op2_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3192 if (ssa_op->result_use >= 0 in zend_jit_trace_clenup_stack()
3193 && ra[ssa_op->result_use] in zend_jit_trace_clenup_stack()
3194 && ra[ssa_op->result_use]->range.end == line) { in zend_jit_trace_clenup_stack()
3215 …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
3217 int var = ssa_op->result_def; in zend_jit_may_delay_fetch_this()
3461 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
3483 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3485 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3489 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3491 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3500 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3502 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3506 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3508 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3517 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3519 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3523 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3525 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3531 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3533 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3537 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3539 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3548 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3550 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3554 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3556 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3562 if (ssa_op->op1_use >= 0) { in zend_jit_trace_update_condition_ranges()
3564 &ssa->var_info[ssa_op->op1_use], in zend_jit_trace_update_condition_ranges()
3568 if (ssa_op->op2_use >= 0) { in zend_jit_trace_update_condition_ranges()
3570 &ssa->var_info[ssa_op->op2_use], in zend_jit_trace_update_condition_ranges()
3579 static zend_bool zend_jit_may_skip_comparison(const zend_op *opline, const zend_ssa_op *ssa_op, con… in zend_jit_may_skip_comparison() argument
3586 if (ssa_op->op2_use >= 0) { in zend_jit_may_skip_comparison()
3587 if ((ssa_op-1)->op1_def == ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3588 ssa_op--; in zend_jit_may_skip_comparison()
3589 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3597 } else if ((ssa_op-1)->result_def == ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3598 ssa_op--; in zend_jit_may_skip_comparison()
3599 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3611 if (ssa_op->op1_use >= 0) { in zend_jit_may_skip_comparison()
3612 if ((ssa_op-1)->op1_def == ssa_op->op1_use) { in zend_jit_may_skip_comparison()
3613 ssa_op--; in zend_jit_may_skip_comparison()
3614 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3622 } else if ((ssa_op-1)->result_def == ssa_op->op1_use) { in zend_jit_may_skip_comparison()
3623 ssa_op--; in zend_jit_may_skip_comparison()
3624 opline = ssa_opcodes[ssa_op - ssa->ops]; in zend_jit_may_skip_comparison()
3634 const zend_ssa_op *prev_ssa_op = ssa_op - 1; in zend_jit_may_skip_comparison()
3645 if (ssa_op->op1_use == prev_ssa_op->op1_use in zend_jit_may_skip_comparison()
3646 && ssa_op->op2_use == prev_ssa_op->op2_use) { in zend_jit_may_skip_comparison()
3655 if (ssa_op->op1_use < 0) { in zend_jit_may_skip_comparison()
3660 if (ssa_op->op2_use < 0) { in zend_jit_may_skip_comparison()
3706 const zend_ssa_op *ssa_op, *orig_ssa_op; in zend_jit_trace() local
3972 ssa_op = (JIT_G(opt_level) >= ZEND_JIT_LEVEL_INLINE) ? ssa->ops : NULL; in zend_jit_trace()
4069 … (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4070 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4075 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4077 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4083 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4160 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4249 …) && (res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4250 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4257 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4312 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4336 … (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4337 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4343 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4345 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
4369 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4379 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4383 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4384 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4397 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
4420 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4421 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4433 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4441 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4445 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4446 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4455 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4456 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4464 if (!zend_jit_incdec_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4467 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4500 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4501 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4513 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4521 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4525 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4526 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4535 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4536 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4546 if (!zend_jit_assign_obj_op(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4549 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4569 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4570 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
4582 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4590 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4594 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4595 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4604 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
4605 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
4615 if (!zend_jit_assign_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
4618 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
4622 && (ssa_op+1)->op1_def >= 0 in zend_jit_trace()
4623 && ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4624 …ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_… in zend_jit_trace()
4641 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
4651 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
4655 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4656 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4667 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
4671 && (ssa_op+1)->op1_def >= 0 in zend_jit_trace()
4672 && ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4673 …ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_… in zend_jit_trace()
4683 && ssa_op->op2_def >= 0 in zend_jit_trace()
4684 && (!ssa->vars[ssa_op->op2_def].no_val in zend_jit_trace()
4706 !ssa->var_info[ssa_op->op1_use].guarded_reference, 0)) { in zend_jit_trace()
4710 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4711 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4778 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { in zend_jit_trace()
4782 && ssa_op->op2_def >= 0 in zend_jit_trace()
4783 && ssa->vars[ssa_op->op2_def].alias == NO_ALIAS) { in zend_jit_trace()
4784 …ssa->var_info[ssa_op->op2_def].guarded_reference = ssa->var_info[ssa_op->op2_use].guarded_referenc… in zend_jit_trace()
4795 && ssa_op->op1_def >= 0 in zend_jit_trace()
4796 && !ssa->vars[ssa_op->op1_def].no_val) { in zend_jit_trace()
4824 && ssa_op->op1_def >= 0 in zend_jit_trace()
4825 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4826 …ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_referenc… in zend_jit_trace()
4833 …? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level… in zend_jit_trace()
4877 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4878 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
4897 && ssa_op->op1_def >= 0 in zend_jit_trace()
4898 && !ssa->vars[ssa_op->op1_def].no_val) { in zend_jit_trace()
4910 && ssa_op->op1_def >= 0 in zend_jit_trace()
4911 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
4912 …ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_referenc… in zend_jit_trace()
4971 ssa_op != ssa->ops && in zend_jit_trace()
4974 zend_jit_may_skip_comparison(opline, ssa_op, ssa, ssa_opcodes, op_array); in zend_jit_trace()
4983 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
4995 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
4999 zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); in zend_jit_trace()
5007 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5019 ssa_op != ssa->ops && in zend_jit_trace()
5022 zend_jit_may_skip_comparison(opline, ssa_op, ssa, ssa_opcodes, op_array); in zend_jit_trace()
5031 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5046 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5050 zend_jit_trace_update_condition_ranges(opline, ssa_op, op_array, ssa, exit_if_true); in zend_jit_trace()
5058 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5096 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5125 …if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array… in zend_jit_trace()
5185 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5225 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5254 zend_may_throw(opline, ssa_op, op_array, ssa), in zend_jit_trace()
5269 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5273 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5274 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5345 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5349 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5350 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5359 ssa_op->op1_use >= 0 && in zend_jit_trace()
5360 ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5362 ssa->var_info[ssa_op->op1_use].type &= ~MAY_BE_PACKED_GUARD; in zend_jit_trace()
5375 if (!zend_jit_fetch_dim_read(&dasm_state, opline, ssa, ssa_op, in zend_jit_trace()
5409 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
5419 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5423 && ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5424 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5440 && !ssa->var_info[ssa_op->op1_use].indirect_reference)))) { in zend_jit_trace()
5443 if (ssa_op->result_def > 0 in zend_jit_trace()
5447 ssa->var_info[ssa_op->result_def].indirect_reference = 1; in zend_jit_trace()
5460 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5464 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5465 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5478 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5480 if (ssa_op->op1_use >= 0 in zend_jit_trace()
5481 && ssa->var_info[ssa_op->op1_use].avoid_refcounting) { in zend_jit_trace()
5502 ssa_op->op1_use >= 0 && in zend_jit_trace()
5503 ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5505 ssa->var_info[ssa_op->op1_use].type &= ~MAY_BE_PACKED_GUARD; in zend_jit_trace()
5521 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), in zend_jit_trace()
5565 &op1_info, &op1_addr, !ssa->var_info[ssa_op->op1_use].indirect_reference)) { in zend_jit_trace()
5573 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5577 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5578 … ssa->var_info[ssa_op->op1_def >= 0 ? ssa_op->op1_def : ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5587 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5588 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
5595 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5596 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
5597 avoid_refcounting = ssa->var_info[ssa_op->op1_use].avoid_refcounting; in zend_jit_trace()
5600 if (!zend_jit_fetch_obj(&dasm_state, opline, op_array, ssa, ssa_op, in zend_jit_trace()
5603 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, MAY_BE_STRING))) { in zend_jit_trace()
5609 orig_ssa_op = ssa_op; in zend_jit_trace()
5616 if (ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) { in zend_jit_trace()
5617 ssa->var_info[ssa_op->op1_def].guarded_reference = 1; in zend_jit_trace()
5624 ssa_op++; in zend_jit_trace()
5630 ssa_op = orig_ssa_op; in zend_jit_trace()
5639 orig_ssa_op = ssa_op; in zend_jit_trace()
5643 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
5648 ssa_op++; in zend_jit_trace()
5654 ssa_op = orig_ssa_op; in zend_jit_trace()
5660 zend_may_throw(opline, ssa_op, op_array, ssa))) { in zend_jit_trace()
5679 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5683 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5684 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5698 if (ssa_op->result_def >= 0 && opline->result_type != IS_CV) { in zend_jit_trace()
5699 if (zend_jit_may_delay_fetch_this(op_array, ssa, ssa_opcodes, ssa_op)) { in zend_jit_trace()
5700 ssa->var_info[ssa_op->result_def].delayed_fetch_this = 1; in zend_jit_trace()
5782 if (!zend_jit_fetch_constant(&dasm_state, opline, op_array, ssa, ssa_op)) { in zend_jit_trace()
5808 !ssa->var_info[ssa_op->op1_use].guarded_reference, 1)) { in zend_jit_trace()
5812 && ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) { in zend_jit_trace()
5813 ssa->var_info[ssa_op->op1_use].guarded_reference = 1; in zend_jit_trace()
5819 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5820 zend_ssa_var_info *op1_ssa = ssa->var_info + ssa_op->op1_use; in zend_jit_trace()
5827 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
5828 delayed_fetch_this = ssa->var_info[ssa_op->op1_use].delayed_fetch_this; in zend_jit_trace()
5834 op_array, ssa, ssa_op, frame->call_level, in zend_jit_trace()
5847 …? op_array_ssa->cfg.map[opline - op_array->opcodes] : -1, op_array, ssa, ssa_op, frame->call_level… in zend_jit_trace()
5853 …if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array… in zend_jit_trace()
5866 …if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array… in zend_jit_trace()
5877 …if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array… in zend_jit_trace()
5910 zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), p + 1)) { in zend_jit_trace()
5926 zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); in zend_jit_trace()
5947 if (ssa_op) { in zend_jit_trace()
5951 if (ssa_op->result_def >= 0) { in zend_jit_trace()
5958 } else if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace()
5959 && has_concrete_type(ssa->var_info[ssa_op->result_def].type)) { in zend_jit_trace()
5960 type = concrete_type(ssa->var_info[ssa_op->result_def].type); in zend_jit_trace()
5968 && ssa_op->op1_use >= 0 in zend_jit_trace()
5970 && (ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF) == 0) { in zend_jit_trace()
5989 (type == IS_UNKNOWN || !ra || !ra[ssa_op->result_def])); in zend_jit_trace()
5990 if (ssa->var_info[ssa_op->result_def].type & MAY_BE_INDIRECT) { in zend_jit_trace()
5994 ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
5998 } else if (ssa->var_info[ssa_op->result_def].avoid_refcounting) { in zend_jit_trace()
6000 } else if (ra && ra[ssa_op->result_def]) { in zend_jit_trace()
6001 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, in zend_jit_trace()
6002 ra[ssa_op->result_def]->flags & ZREG_STORE); in zend_jit_trace()
6008 …rence_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->result_def, &… in zend_jit_trace()
6009 ssa->var_info[ssa_op->result_def].range.min = tmp.min; in zend_jit_trace()
6010 ssa->var_info[ssa_op->result_def].range.max = tmp.max; in zend_jit_trace()
6011 ssa->var_info[ssa_op->result_def].range.underflow = 0; in zend_jit_trace()
6012 ssa->var_info[ssa_op->result_def].range.overflow = 0; in zend_jit_trace()
6013 ssa->var_info[ssa_op->result_def].has_range = 1; in zend_jit_trace()
6016 if (ssa_op->op1_def >= 0 in zend_jit_trace()
6022 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6023 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6024 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6045 (!ra[ssa_op->op1_def] && in zend_jit_trace()
6046 (opline->opcode == ZEND_ASSIGN || !ssa->vars[ssa_op->op1_def].no_val)))); in zend_jit_trace()
6048 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6049 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6050 uint8_t flags = ra[ssa_op->op1_def]->flags & ZREG_STORE; in zend_jit_trace()
6052 if (ssa_op->op1_use >= 0) { in zend_jit_trace()
6060 if (!ra[ssa_op->op1_use]) { in zend_jit_trace()
6065 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, flags); in zend_jit_trace()
6069 …rence_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp… in zend_jit_trace()
6070 ssa->var_info[ssa_op->op1_def].range.min = tmp.min; in zend_jit_trace()
6071 ssa->var_info[ssa_op->op1_def].range.max = tmp.max; in zend_jit_trace()
6072 ssa->var_info[ssa_op->op1_def].range.underflow = 0; in zend_jit_trace()
6073 ssa->var_info[ssa_op->op1_def].range.overflow = 0; in zend_jit_trace()
6074 ssa->var_info[ssa_op->op1_def].has_range = 1; in zend_jit_trace()
6077 if (ssa_op->op2_def >= 0 in zend_jit_trace()
6083 if (!(ssa->var_info[ssa_op->op2_def].type & MAY_BE_GUARD) in zend_jit_trace()
6084 && has_concrete_type(ssa->var_info[ssa_op->op2_def].type)) { in zend_jit_trace()
6085 type = concrete_type(ssa->var_info[ssa_op->op2_def].type); in zend_jit_trace()
6092 (!ra[ssa_op->op2_def] && !ssa->vars[ssa_op->op2_def].no_val))); in zend_jit_trace()
6094 ssa->var_info[ssa_op->op2_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6095 if (ra && ra[ssa_op->op2_def]) { in zend_jit_trace()
6096 uint8_t flags = ra[ssa_op->op2_def]->flags & ZREG_STORE; in zend_jit_trace()
6098 if (ssa_op->op2_use >= 0) { in zend_jit_trace()
6100 if (!ra[ssa_op->op2_use] in zend_jit_trace()
6101 || ra[ssa_op->op2_use]->reg != ra[ssa_op->op2_def]->reg) { in zend_jit_trace()
6106 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op2.var), ra[ssa_op->op2_def]->reg, flags); in zend_jit_trace()
6110 …rence_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op2_def, &tmp… in zend_jit_trace()
6111 ssa->var_info[ssa_op->op2_def].range.min = tmp.min; in zend_jit_trace()
6112 ssa->var_info[ssa_op->op2_def].range.max = tmp.max; in zend_jit_trace()
6113 ssa->var_info[ssa_op->op2_def].range.underflow = 0; in zend_jit_trace()
6114 ssa->var_info[ssa_op->op2_def].range.overflow = 0; in zend_jit_trace()
6115 ssa->var_info[ssa_op->op2_def].has_range = 1; in zend_jit_trace()
6129 ssa_op++; in zend_jit_trace()
6131 if (ssa_op->op1_def >= 0) { in zend_jit_trace()
6134 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6135 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6136 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6144 (type == IS_UNKNOWN || !ra || !ra[ssa_op->op1_def])); in zend_jit_trace()
6146 ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD; in zend_jit_trace()
6147 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6148 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, in zend_jit_trace()
6149 ra[ssa_op->op1_def]->flags & ZREG_STORE); in zend_jit_trace()
6153 …rence_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp… in zend_jit_trace()
6154 ssa->var_info[ssa_op->op1_def].range.min = tmp.min; in zend_jit_trace()
6155 ssa->var_info[ssa_op->op1_def].range.max = tmp.max; in zend_jit_trace()
6156 ssa->var_info[ssa_op->op1_def].range.underflow = 0; in zend_jit_trace()
6157 ssa->var_info[ssa_op->op1_def].range.overflow = 0; in zend_jit_trace()
6158 ssa->var_info[ssa_op->op1_def].has_range = 1; in zend_jit_trace()
6161 ssa_op++; in zend_jit_trace()
6164 ssa_op++; in zend_jit_trace()
6167 if (ssa_op->result_def >= 0) { in zend_jit_trace()
6170 if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD) in zend_jit_trace()
6171 && has_concrete_type(ssa->var_info[ssa_op->result_def].type)) { in zend_jit_trace()
6172 type = concrete_type(ssa->var_info[ssa_op->result_def].type); in zend_jit_trace()
6175 (!ra || !ra[ssa_op->result_def])); in zend_jit_trace()
6176 if (ra && ra[ssa_op->result_def]) { in zend_jit_trace()
6177 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->result.var), ra[ssa_op->result_def]->reg, in zend_jit_trace()
6178 ra[ssa_op->result_def]->flags & ZREG_STORE); in zend_jit_trace()
6181 ssa_op++; in zend_jit_trace()
6186 ssa_op++; in zend_jit_trace()
6189 if (ssa_op->op1_def >= 0) { in zend_jit_trace()
6192 if (!(ssa->var_info[ssa_op->op1_def].type & MAY_BE_GUARD) in zend_jit_trace()
6193 && has_concrete_type(ssa->var_info[ssa_op->op1_def].type)) { in zend_jit_trace()
6194 type = concrete_type(ssa->var_info[ssa_op->op1_def].type); in zend_jit_trace()
6197 (!ra || !ra[ssa_op->op1_def])); in zend_jit_trace()
6198 if (ra && ra[ssa_op->op1_def]) { in zend_jit_trace()
6199 SET_STACK_REG_EX(stack, EX_VAR_TO_NUM(opline->op1.var), ra[ssa_op->op1_def]->reg, in zend_jit_trace()
6200 ra[ssa_op->op1_def]->flags & ZREG_STORE); in zend_jit_trace()
6203 ssa_op++; in zend_jit_trace()
6208 ssa_op += zend_jit_trace_op_len(opline); in zend_jit_trace()
6213 ssa_op++; in zend_jit_trace()