@@ -2850,9 +2850,11 @@ static zend_jit_reg_var* zend_jit_trace_allocate_registers(zend_jit_trace_rec *t
2850
2850
}
2851
2851
2852
2852
if (ssa_op -> op1_use >= 0
2853
- && RA_HAS_IVAL (ssa_op -> op1_use )
2854
- && !zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> op1_use )) {
2855
- if (support_opline ) {
2853
+ && RA_HAS_IVAL (ssa_op -> op1_use )) {
2854
+ if (!support_opline ) {
2855
+ RA_IVAL_DEL (ssa_op -> op1_use );
2856
+ count -- ;
2857
+ } else if (!zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> op1_use )) {
2856
2858
zend_jit_trace_use_var (idx , ssa_op -> op1_use , ssa_op -> op1_def , ssa_op -> op1_use_chain ,
2857
2859
ra ,
2858
2860
ssa , ssa_opcodes , op_array , op_array_ssa );
@@ -2876,41 +2878,36 @@ static zend_jit_reg_var* zend_jit_trace_allocate_registers(zend_jit_trace_rec *t
2876
2878
RA_IVAL_FLAGS (ssa_op -> op1_use ) |= ZREG_LAST_USE ;
2877
2879
}
2878
2880
}
2879
- } else {
2880
- RA_IVAL_DEL (ssa_op -> op1_use );
2881
- count -- ;
2882
2881
}
2883
2882
}
2884
2883
if (ssa_op -> op2_use >= 0
2885
2884
&& ssa_op -> op2_use != ssa_op -> op1_use
2886
- && RA_HAS_IVAL (ssa_op -> op2_use )
2887
- && !zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> op2_use )) {
2885
+ && RA_HAS_IVAL (ssa_op -> op2_use )) {
2888
2886
/* Quick workaround to disable register allocation for unsupported operand */
2889
2887
// TODO: Find a general solution ???
2890
- if (support_opline && opline -> opcode != ZEND_FETCH_DIM_R ) {
2888
+ if (!support_opline || opline -> opcode == ZEND_FETCH_DIM_R ) {
2889
+ RA_IVAL_DEL (ssa_op -> op2_use );
2890
+ count -- ;
2891
+ } else if (!zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> op2_use )) {
2891
2892
zend_jit_trace_use_var (idx , ssa_op -> op2_use , ssa_op -> op2_def , ssa_op -> op2_use_chain ,
2892
2893
ra ,
2893
2894
ssa , ssa_opcodes , op_array , op_array_ssa );
2894
2895
if (opline -> op2_type != IS_CV ) {
2895
2896
RA_IVAL_FLAGS (ssa_op -> op2_use ) |= ZREG_LAST_USE ;
2896
2897
}
2897
- } else {
2898
- RA_IVAL_DEL (ssa_op -> op2_use );
2899
- count -- ;
2900
2898
}
2901
2899
}
2902
2900
if (ssa_op -> result_use >= 0
2903
2901
&& ssa_op -> result_use != ssa_op -> op1_use
2904
2902
&& ssa_op -> result_use != ssa_op -> op2_use
2905
- && RA_HAS_IVAL (ssa_op -> result_use )
2906
- && !zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> result_use )) {
2907
- if (support_opline ) {
2903
+ && RA_HAS_IVAL (ssa_op -> result_use )) {
2904
+ if (!support_opline ) {
2905
+ RA_IVAL_DEL (ssa_op -> result_use );
2906
+ count -- ;
2907
+ } else if (!zend_ssa_is_no_val_use (opline , ssa_op , ssa_op -> result_use )) {
2908
2908
zend_jit_trace_use_var (idx , ssa_op -> result_use , ssa_op -> result_def , ssa_op -> res_use_chain ,
2909
2909
ra ,
2910
2910
ssa , ssa_opcodes , op_array , op_array_ssa );
2911
- } else {
2912
- RA_IVAL_DEL (ssa_op -> result_use );
2913
- count -- ;
2914
2911
}
2915
2912
}
2916
2913
0 commit comments