@@ -1787,12 +1787,25 @@ static int zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{
1787
1787
}
1788
1788
} WHILE_WORKLIST_END ();
1789
1789
1790
- /* Add all SCC entry variables into worklist for narrowing */
1790
+ /* initialize missing ranges */
1791
1791
for (j = scc_var [scc ]; j >= 0 ; j = next_scc_var [j ]) {
1792
1792
if (!ssa -> var_info [j ].has_range ) {
1793
1793
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 ) {
1796
1809
/* narrowing Phi functions first */
1797
1810
zend_ssa_range_narrowing (op_array , ssa , j , scc );
1798
1811
}
0 commit comments