From 1d48b306395a8c084f00825b1cd47622f67a91e2 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 26 Jan 2021 15:53:49 +0100 Subject: [PATCH 1/2] Move optimizer into core This only moves the files, adjusts the build system, exports APIs and does minor fixups to make sure the code builds. This does not yet try to make the optimizer usable independent of opcache. --- {ext/opcache => Zend}/Optimizer/block_pass.c | 0 .../Optimizer/compact_literals.c | 0 .../opcache => Zend}/Optimizer/compact_vars.c | 1 - {ext/opcache => Zend}/Optimizer/dce.c | 1 - {ext/opcache => Zend}/Optimizer/dfa_pass.c | 0 .../Optimizer/escape_analysis.c | 0 {ext/opcache => Zend}/Optimizer/nop_removal.c | 0 .../Optimizer/optimize_func_calls.c | 0 .../Optimizer/optimize_temp_vars_5.c | 0 {ext/opcache => Zend}/Optimizer/pass1.c | 0 {ext/opcache => Zend}/Optimizer/pass3.c | 0 {ext/opcache => Zend}/Optimizer/sccp.c | 1 - {ext/opcache => Zend}/Optimizer/scdf.c | 1 - {ext/opcache => Zend}/Optimizer/scdf.h | 0 .../Optimizer/ssa_integrity.c | 1 - .../Optimizer/zend_call_graph.c | 8 ++--- .../Optimizer/zend_call_graph.h | 8 ++--- {ext/opcache => Zend}/Optimizer/zend_cfg.c | 8 ++--- {ext/opcache => Zend}/Optimizer/zend_cfg.h | 8 ++--- {ext/opcache => Zend}/Optimizer/zend_dfg.c | 2 +- {ext/opcache => Zend}/Optimizer/zend_dfg.h | 2 +- {ext/opcache => Zend}/Optimizer/zend_dump.c | 8 ++--- {ext/opcache => Zend}/Optimizer/zend_dump.h | 8 ++--- .../Optimizer/zend_func_info.c | 4 +-- .../Optimizer/zend_func_info.h | 4 +-- .../Optimizer/zend_inference.c | 23 +++++++------ .../Optimizer/zend_inference.h | 32 ++++++++---------- .../Optimizer/zend_optimizer.c | 2 +- .../Optimizer/zend_optimizer.h | 4 ++- .../Optimizer/zend_optimizer_internal.h | 0 {ext/opcache => Zend}/Optimizer/zend_ssa.c | 6 ++-- {ext/opcache => Zend}/Optimizer/zend_ssa.h | 6 ++-- .../Optimizer/zend_worklist.h | 0 Zend/zend.c | 5 +++ configure.ac | 33 +++++++++++++++++-- ext/opcache/ZendAccelerator.c | 7 ---- ext/opcache/config.m4 | 21 ------------ ext/opcache/config.w32 | 2 -- win32/build/config.w32 | 2 ++ 39 files changed, 103 insertions(+), 105 deletions(-) rename {ext/opcache => Zend}/Optimizer/block_pass.c (100%) rename {ext/opcache => Zend}/Optimizer/compact_literals.c (100%) rename {ext/opcache => Zend}/Optimizer/compact_vars.c (99%) rename {ext/opcache => Zend}/Optimizer/dce.c (99%) rename {ext/opcache => Zend}/Optimizer/dfa_pass.c (100%) rename {ext/opcache => Zend}/Optimizer/escape_analysis.c (100%) rename {ext/opcache => Zend}/Optimizer/nop_removal.c (100%) rename {ext/opcache => Zend}/Optimizer/optimize_func_calls.c (100%) rename {ext/opcache => Zend}/Optimizer/optimize_temp_vars_5.c (100%) rename {ext/opcache => Zend}/Optimizer/pass1.c (100%) rename {ext/opcache => Zend}/Optimizer/pass3.c (100%) rename {ext/opcache => Zend}/Optimizer/sccp.c (99%) rename {ext/opcache => Zend}/Optimizer/scdf.c (99%) rename {ext/opcache => Zend}/Optimizer/scdf.h (100%) rename {ext/opcache => Zend}/Optimizer/ssa_integrity.c (99%) rename {ext/opcache => Zend}/Optimizer/zend_call_graph.c (94%) rename {ext/opcache => Zend}/Optimizer/zend_call_graph.h (84%) rename {ext/opcache => Zend}/Optimizer/zend_cfg.c (98%) rename {ext/opcache => Zend}/Optimizer/zend_cfg.h (93%) rename {ext/opcache => Zend}/Optimizer/zend_dfg.c (98%) rename {ext/opcache => Zend}/Optimizer/zend_dfg.h (92%) rename {ext/opcache => Zend}/Optimizer/zend_dump.c (98%) rename {ext/opcache => Zend}/Optimizer/zend_dump.h (79%) rename {ext/opcache => Zend}/Optimizer/zend_func_info.c (99%) rename {ext/opcache => Zend}/Optimizer/zend_func_info.h (97%) rename {ext/opcache => Zend}/Optimizer/zend_inference.c (99%) rename {ext/opcache => Zend}/Optimizer/zend_inference.h (88%) rename {ext/opcache => Zend}/Optimizer/zend_optimizer.c (99%) rename {ext/opcache => Zend}/Optimizer/zend_optimizer.h (97%) rename {ext/opcache => Zend}/Optimizer/zend_optimizer_internal.h (100%) rename {ext/opcache => Zend}/Optimizer/zend_ssa.c (99%) rename {ext/opcache => Zend}/Optimizer/zend_ssa.h (96%) rename {ext/opcache => Zend}/Optimizer/zend_worklist.h (100%) diff --git a/ext/opcache/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c similarity index 100% rename from ext/opcache/Optimizer/block_pass.c rename to Zend/Optimizer/block_pass.c diff --git a/ext/opcache/Optimizer/compact_literals.c b/Zend/Optimizer/compact_literals.c similarity index 100% rename from ext/opcache/Optimizer/compact_literals.c rename to Zend/Optimizer/compact_literals.c diff --git a/ext/opcache/Optimizer/compact_vars.c b/Zend/Optimizer/compact_vars.c similarity index 99% rename from ext/opcache/Optimizer/compact_vars.c rename to Zend/Optimizer/compact_vars.c index bf7a00578739..e70e1898279b 100644 --- a/ext/opcache/Optimizer/compact_vars.c +++ b/Zend/Optimizer/compact_vars.c @@ -16,7 +16,6 @@ +----------------------------------------------------------------------+ */ -#include "ZendAccelerator.h" #include "Optimizer/zend_optimizer_internal.h" #include "zend_bitset.h" diff --git a/ext/opcache/Optimizer/dce.c b/Zend/Optimizer/dce.c similarity index 99% rename from ext/opcache/Optimizer/dce.c rename to Zend/Optimizer/dce.c index 339b08167da0..940f1b6ee2a4 100644 --- a/ext/opcache/Optimizer/dce.c +++ b/Zend/Optimizer/dce.c @@ -17,7 +17,6 @@ +----------------------------------------------------------------------+ */ -#include "ZendAccelerator.h" #include "Optimizer/zend_optimizer_internal.h" #include "Optimizer/zend_inference.h" #include "Optimizer/zend_ssa.h" diff --git a/ext/opcache/Optimizer/dfa_pass.c b/Zend/Optimizer/dfa_pass.c similarity index 100% rename from ext/opcache/Optimizer/dfa_pass.c rename to Zend/Optimizer/dfa_pass.c diff --git a/ext/opcache/Optimizer/escape_analysis.c b/Zend/Optimizer/escape_analysis.c similarity index 100% rename from ext/opcache/Optimizer/escape_analysis.c rename to Zend/Optimizer/escape_analysis.c diff --git a/ext/opcache/Optimizer/nop_removal.c b/Zend/Optimizer/nop_removal.c similarity index 100% rename from ext/opcache/Optimizer/nop_removal.c rename to Zend/Optimizer/nop_removal.c diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/Zend/Optimizer/optimize_func_calls.c similarity index 100% rename from ext/opcache/Optimizer/optimize_func_calls.c rename to Zend/Optimizer/optimize_func_calls.c diff --git a/ext/opcache/Optimizer/optimize_temp_vars_5.c b/Zend/Optimizer/optimize_temp_vars_5.c similarity index 100% rename from ext/opcache/Optimizer/optimize_temp_vars_5.c rename to Zend/Optimizer/optimize_temp_vars_5.c diff --git a/ext/opcache/Optimizer/pass1.c b/Zend/Optimizer/pass1.c similarity index 100% rename from ext/opcache/Optimizer/pass1.c rename to Zend/Optimizer/pass1.c diff --git a/ext/opcache/Optimizer/pass3.c b/Zend/Optimizer/pass3.c similarity index 100% rename from ext/opcache/Optimizer/pass3.c rename to Zend/Optimizer/pass3.c diff --git a/ext/opcache/Optimizer/sccp.c b/Zend/Optimizer/sccp.c similarity index 99% rename from ext/opcache/Optimizer/sccp.c rename to Zend/Optimizer/sccp.c index bc9dc38680d4..e097f654c89f 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/Zend/Optimizer/sccp.c @@ -19,7 +19,6 @@ #include "php.h" #include "zend_type_info.h" -#include "ZendAccelerator.h" #include "Optimizer/zend_optimizer_internal.h" #include "Optimizer/zend_call_graph.h" #include "Optimizer/zend_inference.h" diff --git a/ext/opcache/Optimizer/scdf.c b/Zend/Optimizer/scdf.c similarity index 99% rename from ext/opcache/Optimizer/scdf.c rename to Zend/Optimizer/scdf.c index 89852e89e003..e414081987ec 100644 --- a/ext/opcache/Optimizer/scdf.c +++ b/Zend/Optimizer/scdf.c @@ -16,7 +16,6 @@ +----------------------------------------------------------------------+ */ -#include "ZendAccelerator.h" #include "Optimizer/zend_optimizer_internal.h" #include "Optimizer/scdf.h" diff --git a/ext/opcache/Optimizer/scdf.h b/Zend/Optimizer/scdf.h similarity index 100% rename from ext/opcache/Optimizer/scdf.h rename to Zend/Optimizer/scdf.h diff --git a/ext/opcache/Optimizer/ssa_integrity.c b/Zend/Optimizer/ssa_integrity.c similarity index 99% rename from ext/opcache/Optimizer/ssa_integrity.c rename to Zend/Optimizer/ssa_integrity.c index 47b9d6053e80..4bd770581641 100644 --- a/ext/opcache/Optimizer/ssa_integrity.c +++ b/Zend/Optimizer/ssa_integrity.c @@ -16,7 +16,6 @@ +----------------------------------------------------------------------+ */ -#include "ZendAccelerator.h" #include "Optimizer/zend_optimizer_internal.h" /* The ssa_verify_integrity() function ensures that that certain invariants of the SSA form and diff --git a/ext/opcache/Optimizer/zend_call_graph.c b/Zend/Optimizer/zend_call_graph.c similarity index 94% rename from ext/opcache/Optimizer/zend_call_graph.c rename to Zend/Optimizer/zend_call_graph.c index 124596ea397a..b0f3247cd72a 100644 --- a/ext/opcache/Optimizer/zend_call_graph.c +++ b/Zend/Optimizer/zend_call_graph.c @@ -44,7 +44,7 @@ static void zend_op_array_collect(zend_op_array *op_array, void *context) call_graph->op_arrays_count++; } -int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) +ZEND_API int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info) { zend_op *opline = op_array->opcodes; zend_op *end = opline + op_array->last; @@ -219,7 +219,7 @@ static void zend_sort_op_arrays(zend_call_graph *call_graph) // TODO: perform topological sort of cyclic call graph } -int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */ +ZEND_API int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */ { call_graph->op_arrays_count = 0; zend_foreach_op_array(script, zend_op_array_calc, call_graph); @@ -233,7 +233,7 @@ int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_gra } /* }}} */ -void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */ +ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */ { int i; @@ -245,7 +245,7 @@ void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_ } /* }}} */ -zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array) /* {{{ */ +ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array) /* {{{ */ { zend_call_info **map, *call; if (!info->callee_info) { diff --git a/ext/opcache/Optimizer/zend_call_graph.h b/Zend/Optimizer/zend_call_graph.h similarity index 84% rename from ext/opcache/Optimizer/zend_call_graph.h rename to Zend/Optimizer/zend_call_graph.h index 2a3fb4380fcd..a456dcfbb83e 100644 --- a/ext/opcache/Optimizer/zend_call_graph.h +++ b/Zend/Optimizer/zend_call_graph.h @@ -59,10 +59,10 @@ typedef struct _zend_call_graph { BEGIN_EXTERN_C() -int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph); -void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph); -zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array); -int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info); +ZEND_API int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph); +ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph); +ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array); +ZEND_API int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info); END_EXTERN_C() diff --git a/ext/opcache/Optimizer/zend_cfg.c b/Zend/Optimizer/zend_cfg.c similarity index 98% rename from ext/opcache/Optimizer/zend_cfg.c rename to Zend/Optimizer/zend_cfg.c index bbf8efb41acc..973a93ef6c48 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/Zend/Optimizer/zend_cfg.c @@ -269,7 +269,7 @@ static void initialize_block(zend_basic_block *block) { block_map[i]++; \ } while (0) -int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg) /* {{{ */ +ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg) /* {{{ */ { uint32_t flags = 0; uint32_t i; @@ -599,7 +599,7 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b } /* }}} */ -int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */ +ZEND_API int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */ { int j, s, edges; zend_basic_block *b; @@ -682,7 +682,7 @@ static void compute_postnum_recursive( /* Computes dominator tree using algorithm from "A Simple, Fast Dominance Algorithm" by * Cooper, Harvey and Kennedy. */ -int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ +ZEND_API int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ { zend_basic_block *blocks = cfg->blocks; int blocks_count = cfg->blocks_count; @@ -795,7 +795,7 @@ static void swap_blocks(block_info *a, block_info *b) { *b = tmp; } -int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ +ZEND_API int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ { int i, j, k, n; int time; diff --git a/ext/opcache/Optimizer/zend_cfg.h b/Zend/Optimizer/zend_cfg.h similarity index 93% rename from ext/opcache/Optimizer/zend_cfg.h rename to Zend/Optimizer/zend_cfg.h index eb607c83c2f4..6fff720ed3ba 100644 --- a/ext/opcache/Optimizer/zend_cfg.h +++ b/Zend/Optimizer/zend_cfg.h @@ -116,11 +116,11 @@ typedef struct _zend_cfg { BEGIN_EXTERN_C() -int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg); +ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg); void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg); -int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg); -int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg); -int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg); +ZEND_API int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg); +ZEND_API int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg); +ZEND_API int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg); END_EXTERN_C() diff --git a/ext/opcache/Optimizer/zend_dfg.c b/Zend/Optimizer/zend_dfg.c similarity index 98% rename from ext/opcache/Optimizer/zend_dfg.c rename to Zend/Optimizer/zend_dfg.c index 25a910ef711a..b059f1f0eabf 100644 --- a/ext/opcache/Optimizer/zend_dfg.c +++ b/Zend/Optimizer/zend_dfg.c @@ -242,7 +242,7 @@ static zend_always_inline void _zend_dfg_add_use_def_op(const zend_op_array *op_ } /* }}} */ -void zend_dfg_add_use_def_op(const zend_op_array *op_array, const zend_op *opline, uint32_t build_flags, zend_bitset use, zend_bitset def) /* {{{ */ +ZEND_API void zend_dfg_add_use_def_op(const zend_op_array *op_array, const zend_op *opline, uint32_t build_flags, zend_bitset use, zend_bitset def) /* {{{ */ { _zend_dfg_add_use_def_op(op_array, opline, build_flags, use, def); } diff --git a/ext/opcache/Optimizer/zend_dfg.h b/Zend/Optimizer/zend_dfg.h similarity index 92% rename from ext/opcache/Optimizer/zend_dfg.h rename to Zend/Optimizer/zend_dfg.h index a675187794d6..6ec92be307d3 100644 --- a/ext/opcache/Optimizer/zend_dfg.h +++ b/Zend/Optimizer/zend_dfg.h @@ -44,7 +44,7 @@ typedef struct _zend_dfg { BEGIN_EXTERN_C() int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg *dfg, uint32_t build_flags); -void zend_dfg_add_use_def_op(const zend_op_array *op_array, const zend_op *opline, uint32_t build_flags, zend_bitset use, zend_bitset def); +ZEND_API void zend_dfg_add_use_def_op(const zend_op_array *op_array, const zend_op *opline, uint32_t build_flags, zend_bitset use, zend_bitset def); END_EXTERN_C() diff --git a/ext/opcache/Optimizer/zend_dump.c b/Zend/Optimizer/zend_dump.c similarity index 98% rename from ext/opcache/Optimizer/zend_dump.c rename to Zend/Optimizer/zend_dump.c index cb835574d885..e2fdbbcbf738 100644 --- a/ext/opcache/Optimizer/zend_dump.c +++ b/Zend/Optimizer/zend_dump.c @@ -133,7 +133,7 @@ static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint32_t fla } } -void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num) +ZEND_API void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num) { if (var_type == IS_CV && var_num < op_array->last_var) { fprintf(stderr, "CV%d($%s)", var_num, op_array->vars[var_num]->val); @@ -332,7 +332,7 @@ static void zend_dump_ssa_var_info(const zend_ssa *ssa, int ssa_var_num, uint32_ dump_flags); } -void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, zend_uchar var_type, int var_num, uint32_t dump_flags) +ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, zend_uchar var_type, int var_num, uint32_t dump_flags) { if (ssa_var_num >= 0) { fprintf(stderr, "#%d.", ssa_var_num); @@ -405,7 +405,7 @@ static void zend_dump_range_constraint(const zend_op_array *op_array, const zend } } -void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op) +ZEND_API void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op) { const char *name = zend_get_opcode_name(opline->opcode); uint32_t flags = zend_get_opcode_flags(opline->opcode); @@ -881,7 +881,7 @@ void zend_dump_op_array_name(const zend_op_array *op_array) } } -void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data) +ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data) { int i; const zend_cfg *cfg = NULL; diff --git a/ext/opcache/Optimizer/zend_dump.h b/Zend/Optimizer/zend_dump.h similarity index 79% rename from ext/opcache/Optimizer/zend_dump.h rename to Zend/Optimizer/zend_dump.h index 3d8ff7ad7a27..b0e0d7966bd4 100644 --- a/ext/opcache/Optimizer/zend_dump.h +++ b/Zend/Optimizer/zend_dump.h @@ -30,15 +30,15 @@ BEGIN_EXTERN_C() -void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data); -void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op); +ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data); +ZEND_API void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *b, const zend_op *opline, uint32_t dump_flags, const zend_ssa *ssa, const zend_ssa_op *ssa_op); void zend_dump_dominators(const zend_op_array *op_array, const zend_cfg *cfg); void zend_dump_dfg(const zend_op_array *op_array, const zend_cfg *cfg, const zend_dfg *dfg); void zend_dump_phi_placement(const zend_op_array *op_array, const zend_ssa *ssa); void zend_dump_variables(const zend_op_array *op_array); void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t dump_flags); -void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, zend_uchar var_type, int var_num, uint32_t dump_flags); -void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num); +ZEND_API void zend_dump_ssa_var(const zend_op_array *op_array, const zend_ssa *ssa, int ssa_var_num, zend_uchar var_type, int var_num, uint32_t dump_flags); +ZEND_API void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num); void zend_dump_op_array_name(const zend_op_array *op_array); void zend_dump_const(const zval *zv); void zend_dump_ht(HashTable *ht); diff --git a/ext/opcache/Optimizer/zend_func_info.c b/Zend/Optimizer/zend_func_info.c similarity index 99% rename from ext/opcache/Optimizer/zend_func_info.c rename to Zend/Optimizer/zend_func_info.c index 228051ee8600..073a054c0fd8 100644 --- a/ext/opcache/Optimizer/zend_func_info.c +++ b/Zend/Optimizer/zend_func_info.c @@ -837,7 +837,7 @@ static const func_info_t func_infos[] = { }; static HashTable func_info; -int zend_func_info_rid = -1; +ZEND_API int zend_func_info_rid = -1; static uint32_t get_internal_func_info( const zend_call_info *call_info, const zend_ssa *ssa, zend_string *lcname) { @@ -859,7 +859,7 @@ static uint32_t get_internal_func_info( } } -uint32_t zend_get_func_info( +ZEND_API uint32_t zend_get_func_info( const zend_call_info *call_info, const zend_ssa *ssa, zend_class_entry **ce, bool *ce_is_instanceof) { diff --git a/ext/opcache/Optimizer/zend_func_info.h b/Zend/Optimizer/zend_func_info.h similarity index 97% rename from ext/opcache/Optimizer/zend_func_info.h rename to Zend/Optimizer/zend_func_info.h index 423d557f7ac7..53ad99c22eca 100644 --- a/ext/opcache/Optimizer/zend_func_info.h +++ b/Zend/Optimizer/zend_func_info.h @@ -54,9 +54,9 @@ typedef struct _zend_call_info zend_call_info; BEGIN_EXTERN_C() -extern int zend_func_info_rid; +extern ZEND_API int zend_func_info_rid; -uint32_t zend_get_func_info( +ZEND_API uint32_t zend_get_func_info( const zend_call_info *call_info, const zend_ssa *ssa, zend_class_entry **ce, bool *ce_is_instanceof); diff --git a/ext/opcache/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c similarity index 99% rename from ext/opcache/Optimizer/zend_inference.c rename to Zend/Optimizer/zend_inference.c index 92be7ee802fd..ba51283bebc0 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -207,7 +207,7 @@ static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_ssa *ssa, } /* }}} */ -int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ +ZEND_API int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ { int index = 0, *dfs, *root; zend_worklist_stack stack; @@ -253,7 +253,7 @@ int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ } /* }}} */ -int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ +ZEND_API int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ { zend_ssa_var *ssa_vars = ssa->vars; zend_ssa_op *ssa_ops = ssa->ops; @@ -1003,7 +1003,7 @@ int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp); } -int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp) +ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp) { zend_long op1_min, op2_min, op1_max, op2_max; @@ -1955,7 +1955,7 @@ static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa zend_error(E_WARNING, "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net", def_op_name); } -uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert) +ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert) { uint32_t tmp = 0; @@ -2198,7 +2198,7 @@ static uint32_t zend_convert_type_declaration_mask(uint32_t type_mask) { return result_mask; } -uint32_t zend_fetch_arg_info_type(const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce) +ZEND_API uint32_t zend_fetch_arg_info_type(const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce) { uint32_t tmp; @@ -3596,7 +3596,7 @@ static zend_always_inline int _zend_update_type_info( return SUCCESS; } -int zend_update_type_info( +ZEND_API int zend_update_type_info( const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script, @@ -3977,9 +3977,8 @@ static int is_recursive_tail_call(const zend_op_array *op_array, return 0; } -void zend_init_func_return_info(const zend_op_array *op_array, - const zend_script *script, - zend_ssa_var_info *ret) +ZEND_API void zend_init_func_return_info( + const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret) { if (op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE) { zend_arg_info *ret_info = op_array->arg_info - 1; @@ -4224,7 +4223,7 @@ static int zend_infer_types(const zend_op_array *op_array, const zend_script *sc return SUCCESS; } -int zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level) /* {{{ */ +ZEND_API int zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level) /* {{{ */ { zend_ssa_var_info *ssa_var_info; int i; @@ -4296,7 +4295,7 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array) free_alloca(worklist, use_heap); } -int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2) +ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2) { if (opline->op1_type == IS_CV) { if (t1 & MAY_BE_UNDEF) { @@ -4675,7 +4674,7 @@ int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const ze } } -int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa) +ZEND_API int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa) { return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO()); } diff --git a/ext/opcache/Optimizer/zend_inference.h b/Zend/Optimizer/zend_inference.h similarity index 88% rename from ext/opcache/Optimizer/zend_inference.h rename to Zend/Optimizer/zend_inference.h index 11a9d74d7576..839094601277 100644 --- a/ext/opcache/Optimizer/zend_inference.h +++ b/Zend/Optimizer/zend_inference.h @@ -250,14 +250,14 @@ static zend_always_inline bool zend_sub_will_overflow(zend_long a, zend_long b) BEGIN_EXTERN_C() -int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa); -int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa); -int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level); +ZEND_API int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa); +ZEND_API int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa); +ZEND_API int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level); -uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert); +ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert); int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int var, int widening, int narrowing, zend_ssa_range *tmp); -int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp); +ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp); void zend_inference_init_range(const zend_op_array *op_array, zend_ssa *ssa, int var, bool underflow, zend_long min, zend_long max, bool overflow); int zend_inference_narrowing_meet(zend_ssa_var_info *var_info, zend_ssa_range *r); int zend_inference_widening_meet(zend_ssa_var_info *var_info, zend_ssa_range *r); @@ -265,27 +265,23 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array); int zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_bitset worklist, zend_long optimization_level); -uint32_t zend_fetch_arg_info_type( +ZEND_API uint32_t zend_fetch_arg_info_type( const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce); -void zend_init_func_return_info(const zend_op_array *op_array, - const zend_script *script, - zend_ssa_var_info *ret); +ZEND_API void zend_init_func_return_info( + const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret); void zend_func_return_info(const zend_op_array *op_array, const zend_script *script, int recursive, int widening, zend_ssa_var_info *ret); -int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2); -int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa); +ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2); +ZEND_API int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa); -int zend_update_type_info(const zend_op_array *op_array, - zend_ssa *ssa, - const zend_script *script, - zend_op *opline, - zend_ssa_op *ssa_op, - const zend_op **ssa_opcodes, - zend_long optimization_level); +ZEND_API int zend_update_type_info( + const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script, + zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes, + zend_long optimization_level); END_EXTERN_C() diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c similarity index 99% rename from ext/opcache/Optimizer/zend_optimizer.c rename to Zend/Optimizer/zend_optimizer.c index 00c579491a38..ae548fc5200b 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -1405,7 +1405,7 @@ static void step_dump_after_optimizer(zend_op_array *op_array, void *context) { zend_dump_op_array(op_array, ZEND_DUMP_LIVE_RANGES, "after optimizer", NULL); } -int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level) +ZEND_API int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level) { zend_class_entry *ce; zend_string *key; diff --git a/ext/opcache/Optimizer/zend_optimizer.h b/Zend/Optimizer/zend_optimizer.h similarity index 97% rename from ext/opcache/Optimizer/zend_optimizer.h rename to Zend/Optimizer/zend_optimizer.h index 04528d33e27f..4b432554379e 100644 --- a/ext/opcache/Optimizer/zend_optimizer.h +++ b/Zend/Optimizer/zend_optimizer.h @@ -89,8 +89,10 @@ typedef struct _zend_script { uint32_t first_early_binding_opline; /* the linked list of delayed declarations */ } zend_script; -int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level); +BEGIN_EXTERN_C() +ZEND_API int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level); int zend_optimizer_startup(void); int zend_optimizer_shutdown(void); +END_EXTERN_C() #endif diff --git a/ext/opcache/Optimizer/zend_optimizer_internal.h b/Zend/Optimizer/zend_optimizer_internal.h similarity index 100% rename from ext/opcache/Optimizer/zend_optimizer_internal.h rename to Zend/Optimizer/zend_optimizer_internal.h diff --git a/ext/opcache/Optimizer/zend_ssa.c b/Zend/Optimizer/zend_ssa.c similarity index 99% rename from ext/opcache/Optimizer/zend_ssa.c rename to Zend/Optimizer/zend_ssa.c index ad3ff7022b7b..6fe97cbc1e2a 100644 --- a/ext/opcache/Optimizer/zend_ssa.c +++ b/Zend/Optimizer/zend_ssa.c @@ -768,7 +768,7 @@ static zend_always_inline int _zend_ssa_rename_op(const zend_op_array *op_array, } /* }}} */ -int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var) /* {{{ */ +ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var) /* {{{ */ { return _zend_ssa_rename_op(op_array, opline, k, build_flags, ssa_vars_count, ssa_ops, var); } @@ -891,7 +891,7 @@ static int zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, } /* }}} */ -int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa) /* {{{ */ +ZEND_API int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa) /* {{{ */ { zend_basic_block *blocks = ssa->cfg.blocks; zend_ssa_block *ssa_blocks; @@ -1042,7 +1042,7 @@ int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_ } /* }}} */ -int zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ +ZEND_API int zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ { zend_ssa_var *ssa_vars; int i; diff --git a/ext/opcache/Optimizer/zend_ssa.h b/Zend/Optimizer/zend_ssa.h similarity index 96% rename from ext/opcache/Optimizer/zend_ssa.h rename to Zend/Optimizer/zend_ssa.h index 68f39ad0ecd1..ddc9f95f43d8 100644 --- a/ext/opcache/Optimizer/zend_ssa.h +++ b/Zend/Optimizer/zend_ssa.h @@ -145,9 +145,9 @@ typedef struct _zend_ssa { BEGIN_EXTERN_C() -int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa); -int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var); -int zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa); +ZEND_API int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa); +ZEND_API int zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa); +ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var); int zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var); void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to); diff --git a/ext/opcache/Optimizer/zend_worklist.h b/Zend/Optimizer/zend_worklist.h similarity index 100% rename from ext/opcache/Optimizer/zend_worklist.h rename to Zend/Optimizer/zend_worklist.h diff --git a/Zend/zend.c b/Zend/zend.c index 22cdc744e640..4da7991db6d3 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -34,6 +34,7 @@ #include "zend_cpuinfo.h" #include "zend_attributes.h" #include "zend_observer.h" +#include "Optimizer/zend_optimizer.h" static size_t global_map_ptr_last = 0; @@ -953,6 +954,8 @@ void zend_startup(zend_utility_functions *utility_functions) /* {{{ */ php_win32_cp_setup(); #endif + zend_optimizer_startup(); + #ifdef ZTS tsrm_set_new_thread_end_handler(zend_new_thread_end_handler); tsrm_set_shutdown_handler(zend_interned_strings_dtor); @@ -1112,6 +1115,8 @@ void zend_shutdown(void) /* {{{ */ } #endif zend_destroy_rsrc_list_dtors(); + + zend_optimizer_shutdown(); } /* }}} */ diff --git a/configure.ac b/configure.ac index a17f48c551fd..a9058bf7f871 100644 --- a/configure.ac +++ b/configure.ac @@ -1433,6 +1433,14 @@ PHP_SUBST(install_targets) PHP_SUBST(install_binary_targets) PHP_INSTALL_HEADERS([Zend/ TSRM/ include/ main/ main/streams/]) +PHP_INSTALL_HEADERS([Zend/Optimizer], [ \ + zend_call_graph.h \ + zend_cfg.h \ + zend_dump.h \ + zend_func_info.h \ + zend_inference.h \ + zend_optimizer.h \ + zend_ssa.h]) PHP_ADD_SOURCES(TSRM, TSRM.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) @@ -1465,8 +1473,29 @@ PHP_ADD_SOURCES(Zend, \ zend_closures.c zend_weakrefs.c zend_float.c zend_string.c zend_signal.c zend_generators.c \ zend_virtual_cwd.c zend_ast.c zend_objects.c zend_object_handlers.c zend_objects_API.c \ zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_gdb.c \ - zend_observer.c zend_system_id.c, \ - -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) + zend_observer.c zend_system_id.c \ + Optimizer/zend_optimizer.c \ + Optimizer/pass1.c \ + Optimizer/pass3.c \ + Optimizer/optimize_func_calls.c \ + Optimizer/block_pass.c \ + Optimizer/optimize_temp_vars_5.c \ + Optimizer/nop_removal.c \ + Optimizer/compact_literals.c \ + Optimizer/zend_cfg.c \ + Optimizer/zend_dfg.c \ + Optimizer/dfa_pass.c \ + Optimizer/zend_ssa.c \ + Optimizer/zend_inference.c \ + Optimizer/zend_func_info.c \ + Optimizer/zend_call_graph.c \ + Optimizer/sccp.c \ + Optimizer/scdf.c \ + Optimizer/dce.c \ + Optimizer/escape_analysis.c \ + Optimizer/compact_vars.c \ + Optimizer/zend_dump.c \ + , -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) PHP_ADD_BUILD_DIR(main main/streams) PHP_ADD_BUILD_DIR(TSRM) diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 0ebe5a41ae88..5101660a4ac2 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -2957,9 +2957,6 @@ static zend_result accel_post_startup(void) } } - /* Initialize zend_func_info_rid */ - zend_optimizer_startup(); - /********************************************/ /* End of non-SHM dependent initializations */ /********************************************/ @@ -3119,8 +3116,6 @@ static zend_result accel_post_startup(void) zend_accel_blacklist_load(&accel_blacklist, ZCG(accel_directives.user_blacklist_filename)); } - zend_optimizer_startup(); - if (!file_cache_only && ZCG(accel_directives).interned_strings_buffer) { accel_use_shm_interned_strings(); } @@ -3144,8 +3139,6 @@ void accel_shutdown(void) zend_jit_shutdown(); #endif - zend_optimizer_shutdown(); - zend_accel_blacklist_shutdown(&accel_blacklist); if (!ZCG(enabled) || !accel_startup_ok) { diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 index 93d72fb73d19..f09f0bbfde82 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 @@ -312,27 +312,6 @@ int main() { shared_alloc_shm.c \ shared_alloc_mmap.c \ shared_alloc_posix.c \ - Optimizer/zend_optimizer.c \ - Optimizer/pass1.c \ - Optimizer/pass3.c \ - Optimizer/optimize_func_calls.c \ - Optimizer/block_pass.c \ - Optimizer/optimize_temp_vars_5.c \ - Optimizer/nop_removal.c \ - Optimizer/compact_literals.c \ - Optimizer/zend_cfg.c \ - Optimizer/zend_dfg.c \ - Optimizer/dfa_pass.c \ - Optimizer/zend_ssa.c \ - Optimizer/zend_inference.c \ - Optimizer/zend_func_info.c \ - Optimizer/zend_call_graph.c \ - Optimizer/sccp.c \ - Optimizer/scdf.c \ - Optimizer/dce.c \ - Optimizer/escape_analysis.c \ - Optimizer/compact_vars.c \ - Optimizer/zend_dump.c \ $ZEND_JIT_SRC, shared,,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,,yes) diff --git a/ext/opcache/config.w32 b/ext/opcache/config.w32 index fb921c73daec..a7f292ee7625 100644 --- a/ext/opcache/config.w32 +++ b/ext/opcache/config.w32 @@ -38,8 +38,6 @@ if (PHP_OPCACHE != "no") { } } - ADD_SOURCES(configure_module_dirname + "/Optimizer", "zend_optimizer.c pass1.c pass3.c optimize_func_calls.c block_pass.c optimize_temp_vars_5.c nop_removal.c compact_literals.c zend_cfg.c zend_dfg.c dfa_pass.c zend_ssa.c zend_inference.c zend_func_info.c zend_call_graph.c zend_dump.c escape_analysis.c compact_vars.c dce.c sccp.c scdf.c", "opcache", "ext\\opcache\\Optimizer"); - ADD_FLAG('CFLAGS_OPCACHE', "/I " + configure_module_dirname); } diff --git a/win32/build/config.w32 b/win32/build/config.w32 index a7d60812bd6f..64053cc05636 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -238,6 +238,7 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \ zend_default_classes.c zend_execute.c zend_strtod.c zend_gc.c zend_closures.c zend_weakrefs.c \ zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \ zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_observer.c zend_system_id.c"); +ADD_SOURCES("Zend\\Optimizer", "zend_optimizer.c pass1.c pass3.c optimize_func_calls.c block_pass.c optimize_temp_vars_5.c nop_removal.c compact_literals.c zend_cfg.c zend_dfg.c dfa_pass.c zend_ssa.c zend_inference.c zend_func_info.c zend_call_graph.c zend_dump.c escape_analysis.c compact_vars.c dce.c sccp.c scdf.c"); ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); if (VS_TOOLSET && VCVERS >= 1914) { @@ -277,6 +278,7 @@ if (VS_TOOLSET && VCVERS >= 1914) { } PHP_INSTALL_HEADERS("", "Zend/ TSRM/ main/ main/streams/ win32/"); +PHP_INSTALL_HEADERS("Zend/Optimizer", "zend_call_graph.h zend_cfg.h zend_dump.h zend_func_info.h zend_inference.h zend_optimizer.h zend_ssa.h"); STDOUT.WriteBlankLines(1); From 5815ccc6826fcc1eaf12ce44e0d7cf79ecfdbe2c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 27 Jan 2021 09:56:16 +0100 Subject: [PATCH 2/2] Fix out of tree build --- configure.ac | 2 +- ext/opcache/config.m4 | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index a9058bf7f871..11515574467b 100644 --- a/configure.ac +++ b/configure.ac @@ -1499,7 +1499,7 @@ PHP_ADD_SOURCES(Zend, \ PHP_ADD_BUILD_DIR(main main/streams) PHP_ADD_BUILD_DIR(TSRM) -PHP_ADD_BUILD_DIR(Zend) +PHP_ADD_BUILD_DIR(Zend Zend/Optimizer) PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/scripts/Makefile.frag,$abs_srcdir/scripts,scripts) PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Zend/Makefile.frag,$abs_srcdir/Zend,Zend) diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 index f09f0bbfde82..33c99c59c130 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 @@ -315,7 +315,6 @@ int main() { $ZEND_JIT_SRC, shared,,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,,yes) - PHP_ADD_BUILD_DIR([$ext_builddir/Optimizer], 1) PHP_ADD_EXTENSION_DEP(opcache, pcre) if test "$have_shm_ipc" != "yes" && test "$have_shm_mmap_posix" != "yes" && test "$have_shm_mmap_anon" != "yes"; then