@@ -1913,10 +1913,9 @@ static zend_always_inline int zend_is_def_range(zend_op *opline, zend_uchar type
1913
1913
}
1914
1914
/* }}} */
1915
1915
1916
- static void zend_check_live_ranges (zend_op * opline ) /* {{{ */
1916
+ static void zend_check_live_ranges_op1 (zend_op * opline ) /* {{{ */
1917
1917
{
1918
- if ((opline -> op1_type & (IS_VAR |IS_TMP_VAR )) &&
1919
- !zend_is_def_range (opline - 1 , opline -> op1_type , opline -> op1 .var )) {
1918
+ if (!zend_is_def_range (opline - 1 , opline -> op1_type , opline -> op1 .var )) {
1920
1919
1921
1920
if (opline -> opcode == ZEND_OP_DATA ) {
1922
1921
if (!zend_is_def_range (opline - 2 , opline -> op1_type , opline -> op1 .var )) {
@@ -1946,9 +1945,12 @@ static void zend_check_live_ranges(zend_op *opline) /* {{{ */
1946
1945
zend_find_live_range (opline , opline -> op1_type , opline -> op1 .var );
1947
1946
}
1948
1947
}
1948
+ }
1949
+ /* }}} */
1949
1950
1950
- if ((opline -> op2_type & (IS_VAR |IS_TMP_VAR )) &&
1951
- !zend_is_def_range (opline - 1 , opline -> op2_type , opline -> op2 .var )) {
1951
+ static void zend_check_live_ranges_op2 (zend_op * opline ) /* {{{ */
1952
+ {
1953
+ if (!zend_is_def_range (opline - 1 , opline -> op2_type , opline -> op2 .var )) {
1952
1954
1953
1955
if (opline -> opcode == ZEND_OP_DATA ) {
1954
1956
if (!zend_is_def_range (opline - 2 , opline -> op2_type , opline -> op2 .var )) {
@@ -1971,21 +1973,36 @@ static void zend_check_live_ranges(zend_op *opline) /* {{{ */
1971
1973
}
1972
1974
/* }}} */
1973
1975
1976
+ static void zend_check_live_ranges (zend_op * opline ) /* {{{ */
1977
+ {
1978
+ if (opline -> op1_type & (IS_VAR |IS_TMP_VAR )) {
1979
+ zend_check_live_ranges_op1 (opline );
1980
+ }
1981
+ if (opline -> op2_type & (IS_VAR |IS_TMP_VAR )) {
1982
+ zend_check_live_ranges_op2 (opline );
1983
+ }
1984
+ }
1985
+ /* }}} */
1986
+
1974
1987
static zend_op * zend_emit_op (znode * result , zend_uchar opcode , znode * op1 , znode * op2 ) /* {{{ */
1975
1988
{
1976
1989
zend_op * opline = get_next_op ();
1977
1990
opline -> opcode = opcode ;
1978
1991
1979
1992
if (op1 != NULL ) {
1980
1993
SET_NODE (opline -> op1 , op1 );
1994
+ if (opline -> op1_type & (IS_VAR |IS_TMP_VAR )) {
1995
+ zend_check_live_ranges_op1 (opline );
1996
+ }
1981
1997
}
1982
1998
1983
1999
if (op2 != NULL ) {
1984
2000
SET_NODE (opline -> op2 , op2 );
2001
+ if (opline -> op2_type & (IS_VAR |IS_TMP_VAR )) {
2002
+ zend_check_live_ranges_op2 (opline );
2003
+ }
1985
2004
}
1986
2005
1987
- zend_check_live_ranges (opline );
1988
-
1989
2006
if (result ) {
1990
2007
zend_make_var_result (result , opline );
1991
2008
}
@@ -2000,14 +2017,18 @@ static zend_op *zend_emit_op_tmp(znode *result, zend_uchar opcode, znode *op1, z
2000
2017
2001
2018
if (op1 != NULL ) {
2002
2019
SET_NODE (opline -> op1 , op1 );
2020
+ if (opline -> op1_type & (IS_VAR |IS_TMP_VAR )) {
2021
+ zend_check_live_ranges_op1 (opline );
2022
+ }
2003
2023
}
2004
2024
2005
2025
if (op2 != NULL ) {
2006
2026
SET_NODE (opline -> op2 , op2 );
2027
+ if (opline -> op2_type & (IS_VAR |IS_TMP_VAR )) {
2028
+ zend_check_live_ranges_op2 (opline );
2029
+ }
2007
2030
}
2008
2031
2009
- zend_check_live_ranges (opline );
2010
-
2011
2032
if (result ) {
2012
2033
zend_make_tmp_result (result , opline );
2013
2034
}
0 commit comments