@@ -836,6 +836,38 @@ ZEND_EXT_API void zend_jit_status(zval *ret)
836
836
add_assoc_zval (ret , "jit" , & stats );
837
837
}
838
838
839
+ static bool zend_jit_inc_call_level (uint8_t opcode )
840
+ {
841
+ switch (opcode ) {
842
+ case ZEND_INIT_FCALL :
843
+ case ZEND_INIT_FCALL_BY_NAME :
844
+ case ZEND_INIT_NS_FCALL_BY_NAME :
845
+ case ZEND_INIT_METHOD_CALL :
846
+ case ZEND_INIT_DYNAMIC_CALL :
847
+ case ZEND_INIT_STATIC_METHOD_CALL :
848
+ case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL :
849
+ case ZEND_INIT_USER_CALL :
850
+ case ZEND_NEW :
851
+ return true;
852
+ default :
853
+ return false;
854
+ }
855
+ }
856
+
857
+ static bool zend_jit_dec_call_level (uint8_t opcode )
858
+ {
859
+ switch (opcode ) {
860
+ case ZEND_DO_FCALL :
861
+ case ZEND_DO_ICALL :
862
+ case ZEND_DO_UCALL :
863
+ case ZEND_DO_FCALL_BY_NAME :
864
+ case ZEND_CALLABLE_CONVERT :
865
+ return true;
866
+ default :
867
+ return false;
868
+ }
869
+ }
870
+
839
871
static zend_string * zend_jit_func_name (const zend_op_array * op_array )
840
872
{
841
873
smart_str buf = {0 };
@@ -1572,17 +1604,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
1572
1604
for (i = ssa -> cfg .blocks [b ].start ; i <= end ; i ++ ) {
1573
1605
zend_ssa_op * ssa_op = ssa -> ops ? & ssa -> ops [i ] : NULL ;
1574
1606
opline = op_array -> opcodes + i ;
1575
- switch (opline -> opcode ) {
1576
- case ZEND_INIT_FCALL :
1577
- case ZEND_INIT_FCALL_BY_NAME :
1578
- case ZEND_INIT_NS_FCALL_BY_NAME :
1579
- case ZEND_INIT_METHOD_CALL :
1580
- case ZEND_INIT_DYNAMIC_CALL :
1581
- case ZEND_INIT_STATIC_METHOD_CALL :
1582
- case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL :
1583
- case ZEND_INIT_USER_CALL :
1584
- case ZEND_NEW :
1585
- call_level ++ ;
1607
+ if (zend_jit_inc_call_level (opline -> opcode )) {
1608
+ call_level ++ ;
1586
1609
}
1587
1610
1588
1611
if (JIT_G (opt_level ) >= ZEND_JIT_LEVEL_INLINE ) {
@@ -2720,25 +2743,10 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2720
2743
i ++ ;
2721
2744
for (; i < end ; i ++ ) {
2722
2745
opline = op_array -> opcodes + i ;
2723
- switch (opline -> opcode ) {
2724
- case ZEND_INIT_FCALL :
2725
- case ZEND_INIT_FCALL_BY_NAME :
2726
- case ZEND_INIT_NS_FCALL_BY_NAME :
2727
- case ZEND_INIT_METHOD_CALL :
2728
- case ZEND_INIT_DYNAMIC_CALL :
2729
- case ZEND_INIT_STATIC_METHOD_CALL :
2730
- case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL :
2731
- case ZEND_INIT_USER_CALL :
2732
- case ZEND_NEW :
2733
- call_level ++ ;
2734
- break ;
2735
- case ZEND_DO_FCALL :
2736
- case ZEND_DO_ICALL :
2737
- case ZEND_DO_UCALL :
2738
- case ZEND_DO_FCALL_BY_NAME :
2739
- case ZEND_CALLABLE_CONVERT :
2740
- call_level -- ;
2741
- break ;
2746
+ if (zend_jit_inc_call_level (opline -> opcode )) {
2747
+ call_level ++ ;
2748
+ } else if (zend_jit_dec_call_level (opline -> opcode )) {
2749
+ call_level -- ;
2742
2750
}
2743
2751
}
2744
2752
opline = op_array -> opcodes + i ;
@@ -2853,13 +2861,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2853
2861
}
2854
2862
}
2855
2863
done :
2856
- switch (opline -> opcode ) {
2857
- case ZEND_DO_FCALL :
2858
- case ZEND_DO_ICALL :
2859
- case ZEND_DO_UCALL :
2860
- case ZEND_DO_FCALL_BY_NAME :
2861
- case ZEND_CALLABLE_CONVERT :
2862
- call_level -- ;
2864
+ if (zend_jit_dec_call_level (opline -> opcode )) {
2865
+ call_level -- ;
2863
2866
}
2864
2867
}
2865
2868
zend_jit_bb_end (& ctx , b );
0 commit comments