Skip to content

Commit e238a8d

Browse files
committed
Inegrate SSA validation developed by Nikita
1 parent a247cee commit e238a8d

File tree

2 files changed

+429
-0
lines changed

2 files changed

+429
-0
lines changed

ext/opcache/Optimizer/dfa_pass.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
#include "zend_inference.h"
3232
#include "zend_dump.h"
3333

34+
#ifndef ZEND_DEBUG_DFA
35+
# define ZEND_DEBUG_DFA 0
36+
#endif
37+
38+
#if ZEND_DEBUG_DFA
39+
# include "ssa_integrity.c"
40+
#endif
41+
3442
int zend_dfa_analyze_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx, zend_ssa *ssa, uint32_t *flags)
3543
{
3644
uint32_t build_flags;
@@ -460,6 +468,9 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
460468
if (sccp_optimize_op_array(ctx, op_array, ssa, call_map)) {
461469
remove_nops = 1;
462470
}
471+
#if ZEND_DEBUG_DFA
472+
ssa_verify_integrity(op_array, ssa, "after sccp");
473+
#endif
463474
if (ZEND_FUNC_INFO(op_array)) {
464475
if (zend_dfa_optimize_calls(op_array, ssa)) {
465476
remove_nops = 1;
@@ -468,6 +479,9 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
468479
if (ctx->debug_level & ZEND_DUMP_AFTER_PASS_8) {
469480
zend_dump_op_array(op_array, ZEND_DUMP_SSA, "after sccp pass", ssa);
470481
}
482+
#if ZEND_DEBUG_DFA
483+
ssa_verify_integrity(op_array, ssa, "after calls");
484+
#endif
471485
}
472486

473487
if (ZEND_OPTIMIZER_PASS_14 & ctx->optimization_level) {
@@ -477,6 +491,9 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
477491
if (ctx->debug_level & ZEND_DUMP_AFTER_PASS_14) {
478492
zend_dump_op_array(op_array, ZEND_DUMP_SSA, "after dce pass", ssa);
479493
}
494+
#if ZEND_DEBUG_DFA
495+
ssa_verify_integrity(op_array, ssa, "after dce");
496+
#endif
480497
}
481498

482499
for (v = op_array->last_var; v < ssa->vars_count; v++) {
@@ -728,8 +745,15 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
728745
}
729746
}
730747

748+
#if ZEND_DEBUG_DFA
749+
ssa_verify_integrity(op_array, ssa, "after dfa");
750+
#endif
751+
731752
if (remove_nops) {
732753
zend_ssa_remove_nops(op_array, ssa);
754+
#if ZEND_DEBUG_DFA
755+
ssa_verify_integrity(op_array, ssa, "after nop");
756+
#endif
733757
}
734758
}
735759

0 commit comments

Comments
 (0)