Skip to content

Commit e60515f

Browse files
committed
Slightly optimize worklist management
Avoid scanning the worklist twice on every iteration.
1 parent f1f68b6 commit e60515f

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

ext/opcache/Optimizer/zend_inference.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,7 @@ int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ss
269269
}
270270
}
271271

272-
while (!zend_bitset_empty(worklist, zend_bitset_len(ssa_vars_count))) {
273-
i = zend_bitset_first(worklist, zend_bitset_len(ssa_vars_count));
272+
while ((i = zend_bitset_first(worklist, zend_bitset_len(ssa_vars_count))) >= 0) {
274273
zend_bitset_excl(worklist, i);
275274
if (ssa_vars[i].definition_phi) {
276275
/* mark all possible sources as used */
@@ -1568,8 +1567,7 @@ static void zend_infer_ranges_warmup(const zend_op_array *op_array, zend_ssa *ss
15681567

15691568
memset(visited, 0, sizeof(zend_ulong) * worklist_len);
15701569

1571-
while (!zend_bitset_empty(worklist, worklist_len)) {
1572-
j = zend_bitset_first(worklist, worklist_len);
1570+
while ((j = zend_bitset_first(worklist, worklist_len)) >= 0) {
15731571
zend_bitset_excl(worklist, j);
15741572
if (zend_inference_calc_range(op_array, ssa, j, 0, 0, &tmp)) {
15751573
#ifdef NEG_RANGE
@@ -1688,8 +1686,7 @@ static int zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{
16881686
#endif
16891687

16901688
/* widening */
1691-
while (!zend_bitset_empty(worklist, worklist_len)) {
1692-
j = zend_bitset_first(worklist, worklist_len);
1689+
while ((j = zend_bitset_first(worklist, worklist_len)) >= 0) {
16931690
zend_bitset_excl(worklist, j);
16941691
if (zend_ssa_range_widening(op_array, ssa, j, scc)) {
16951692
FOR_EACH_VAR_USAGE(j, ADD_SCC_VAR);
@@ -1705,8 +1702,7 @@ static int zend_infer_ranges(const zend_op_array *op_array, zend_ssa *ssa) /* {{
17051702
}
17061703

17071704
/* narrowing */
1708-
while (!zend_bitset_empty(worklist, worklist_len)) {
1709-
j = zend_bitset_first(worklist, worklist_len);
1705+
while ((j = zend_bitset_first(worklist, worklist_len)) >= 0) {
17101706
zend_bitset_excl(worklist, j);
17111707
if (zend_ssa_range_narrowing(op_array, ssa, j, scc)) {
17121708
FOR_EACH_VAR_USAGE(j, ADD_SCC_VAR);
@@ -3268,8 +3264,7 @@ int zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script
32683264
int i, j;
32693265
uint32_t tmp;
32703266

3271-
while (!zend_bitset_empty(worklist, zend_bitset_len(ssa_vars_count))) {
3272-
j = zend_bitset_first(worklist, zend_bitset_len(ssa_vars_count));
3267+
while ((j = zend_bitset_first(worklist, zend_bitset_len(ssa_vars_count))) >= 0) {
32733268
zend_bitset_excl(worklist, j);
32743269
if (ssa_vars[j].definition_phi) {
32753270
zend_ssa_phi *p = ssa_vars[j].definition_phi;
@@ -3882,7 +3877,7 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array)
38823877
zend_func_info *info = ZEND_FUNC_INFO(op_array);
38833878
zend_call_info *call_info;
38843879
zend_bitset worklist;
3885-
int worklist_len;
3880+
int worklist_len, i;
38863881
ALLOCA_FLAG(use_heap);
38873882

38883883
if (!info->ssa.var_info || !(info->flags & ZEND_FUNC_RECURSIVE)) {
@@ -3899,8 +3894,7 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array)
38993894
}
39003895
call_info = call_info->next_callee;
39013896
}
3902-
while (!zend_bitset_empty(worklist, worklist_len)) {
3903-
int i = zend_bitset_first(worklist, worklist_len);
3897+
while ((i = zend_bitset_first(worklist, worklist_len)) >= 0) {
39043898
zend_bitset_excl(worklist, i);
39053899
if (!info->ssa.var_info[i].recursive) {
39063900
info->ssa.var_info[i].recursive = 1;

0 commit comments

Comments
 (0)