Skip to content

Commit 4e8fa2c

Browse files
committed
Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
1 parent 8e0ddc8 commit 4e8fa2c

File tree

10 files changed

+2046
-4
lines changed

10 files changed

+2046
-4
lines changed

Zend/zend_bitset.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,14 @@ static inline int zend_bitset_last(zend_bitset set, uint32_t len)
245245
} \
246246
} while (0)
247247

248+
static inline int zend_bitset_pop_first(zend_bitset set, uint32_t len) {
249+
int i = zend_bitset_first(set, len);
250+
if (i >= 0) {
251+
zend_bitset_excl(set, i);
252+
}
253+
return i;
254+
}
255+
248256
#endif /* _ZEND_BITSET_H_ */
249257

250258
/*

ext/opcache/Optimizer/dfa_pass.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ static zend_bool opline_supports_assign_contraction(
319319
return 1;
320320
}
321321

322-
void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa)
322+
void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa, zend_call_info **call_map)
323323
{
324324
if (ctx->debug_level & ZEND_DUMP_BEFORE_DFA_PASS) {
325325
zend_dump_op_array(op_array, ZEND_DUMP_SSA, "before dfa pass", ssa);
@@ -332,6 +332,8 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
332332
zend_op *opline;
333333
zval tmp;
334334

335+
sccp_optimize_op_array(op_array, ssa, call_map);
336+
335337
for (v = op_array->last_var; v < ssa->vars_count; v++) {
336338

337339
op_1 = ssa->vars[v].definition;
@@ -598,7 +600,7 @@ void zend_optimize_dfa(zend_op_array *op_array, zend_optimizer_ctx *ctx)
598600
return;
599601
}
600602

601-
zend_dfa_optimize_op_array(op_array, ctx, &ssa);
603+
zend_dfa_optimize_op_array(op_array, ctx, &ssa, NULL);
602604

603605
/* Destroy SSA */
604606
zend_arena_release(&ctx->arena, checkpoint);

0 commit comments

Comments
 (0)