@@ -1787,12 +1787,25 @@ static int zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{
17871787 }
17881788 } WHILE_WORKLIST_END ();
17891789
1790- /* Add all SCC entry variables into worklist for narrowing */
1790+ /* initialize missing ranges */
17911791 for (j = scc_var [scc ]; j >= 0 ; j = next_scc_var [j ]) {
17921792 if (!ssa -> var_info [j ].has_range ) {
17931793 zend_inference_init_range (op_array , ssa , j , 1 , ZEND_LONG_MIN , ZEND_LONG_MAX , 1 );
1794- } else if (ssa -> vars [j ].definition_phi &&
1795- ssa -> vars [j ].definition_phi -> pi < 0 ) {
1794+ FOR_EACH_VAR_USAGE (j , ADD_SCC_VAR );
1795+ }
1796+ }
1797+
1798+ /* widening (second round) */
1799+ WHILE_WORKLIST (worklist , worklist_len , j ) {
1800+ if (zend_ssa_range_widening (op_array , ssa , j , scc )) {
1801+ FOR_EACH_VAR_USAGE (j , ADD_SCC_VAR );
1802+ }
1803+ } WHILE_WORKLIST_END ();
1804+
1805+ /* Add all SCC entry variables into worklist for narrowing */
1806+ for (j = scc_var [scc ]; j >= 0 ; j = next_scc_var [j ]) {
1807+ if (ssa -> vars [j ].definition_phi
1808+ && ssa -> vars [j ].definition_phi -> pi < 0 ) {
17961809 /* narrowing Phi functions first */
17971810 zend_ssa_range_narrowing (op_array , ssa , j , scc );
17981811 }
0 commit comments