diff options
-rw-r--r-- | Zend/Optimizer/block_pass.c (renamed from ext/opcache/Optimizer/block_pass.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/compact_literals.c (renamed from ext/opcache/Optimizer/compact_literals.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/compact_vars.c (renamed from ext/opcache/Optimizer/compact_vars.c) | 1 | ||||
-rw-r--r-- | Zend/Optimizer/dce.c (renamed from ext/opcache/Optimizer/dce.c) | 1 | ||||
-rw-r--r-- | Zend/Optimizer/dfa_pass.c (renamed from ext/opcache/Optimizer/dfa_pass.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/escape_analysis.c (renamed from ext/opcache/Optimizer/escape_analysis.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/nop_removal.c (renamed from ext/opcache/Optimizer/nop_removal.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/optimize_func_calls.c (renamed from ext/opcache/Optimizer/optimize_func_calls.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/optimize_temp_vars_5.c (renamed from ext/opcache/Optimizer/optimize_temp_vars_5.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/pass1.c (renamed from ext/opcache/Optimizer/pass1.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/pass3.c (renamed from ext/opcache/Optimizer/pass3.c) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/sccp.c (renamed from ext/opcache/Optimizer/sccp.c) | 1 | ||||
-rw-r--r-- | Zend/Optimizer/scdf.c (renamed from ext/opcache/Optimizer/scdf.c) | 1 | ||||
-rw-r--r-- | Zend/Optimizer/scdf.h (renamed from ext/opcache/Optimizer/scdf.h) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/ssa_integrity.c (renamed from ext/opcache/Optimizer/ssa_integrity.c) | 1 | ||||
-rw-r--r-- | Zend/Optimizer/zend_call_graph.c (renamed from ext/opcache/Optimizer/zend_call_graph.c) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_call_graph.h (renamed from ext/opcache/Optimizer/zend_call_graph.h) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_cfg.c (renamed from ext/opcache/Optimizer/zend_cfg.c) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_cfg.h (renamed from ext/opcache/Optimizer/zend_cfg.h) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_dfg.c (renamed from ext/opcache/Optimizer/zend_dfg.c) | 2 | ||||
-rw-r--r-- | Zend/Optimizer/zend_dfg.h (renamed from ext/opcache/Optimizer/zend_dfg.h) | 2 | ||||
-rw-r--r-- | Zend/Optimizer/zend_dump.c (renamed from ext/opcache/Optimizer/zend_dump.c) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_dump.h (renamed from ext/opcache/Optimizer/zend_dump.h) | 8 | ||||
-rw-r--r-- | Zend/Optimizer/zend_func_info.c (renamed from ext/opcache/Optimizer/zend_func_info.c) | 4 | ||||
-rw-r--r-- | Zend/Optimizer/zend_func_info.h (renamed from ext/opcache/Optimizer/zend_func_info.h) | 4 | ||||
-rw-r--r-- | Zend/Optimizer/zend_inference.c (renamed from ext/opcache/Optimizer/zend_inference.c) | 23 | ||||
-rw-r--r-- | Zend/Optimizer/zend_inference.h (renamed from ext/opcache/Optimizer/zend_inference.h) | 32 | ||||
-rw-r--r-- | Zend/Optimizer/zend_optimizer.c (renamed from ext/opcache/Optimizer/zend_optimizer.c) | 2 | ||||
-rw-r--r-- | Zend/Optimizer/zend_optimizer.h (renamed from ext/opcache/Optimizer/zend_optimizer.h) | 4 | ||||
-rw-r--r-- | Zend/Optimizer/zend_optimizer_internal.h (renamed from ext/opcache/Optimizer/zend_optimizer_internal.h) | 0 | ||||
-rw-r--r-- | Zend/Optimizer/zend_ssa.c (renamed from ext/opcache/Optimizer/zend_ssa.c) | 6 | ||||
-rw-r--r-- | Zend/Optimizer/zend_ssa.h (renamed from ext/opcache/Optimizer/zend_ssa.h) | 6 | ||||
-rw-r--r-- | Zend/Optimizer/zend_worklist.h (renamed from ext/opcache/Optimizer/zend_worklist.h) | 0 | ||||
-rw-r--r-- | Zend/zend.c | 5 | ||||
-rw-r--r-- | configure.ac | 35 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.c | 7 | ||||
-rw-r--r-- | ext/opcache/config.m4 | 22 | ||||
-rw-r--r-- | ext/opcache/config.w32 | 2 | ||||
-rw-r--r-- | win32/build/config.w32 | 2 |
39 files changed, 104 insertions, 107 deletions
diff --git a/ext/opcache/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c index e833ff3dbf..e833ff3dbf 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/Zend/Optimizer/block_pass.c diff --git a/ext/opcache/Optimizer/compact_literals.c b/Zend/Optimizer/compact_literals.c index 0e1529d2bd..0e1529d2bd 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/Zend/Optimizer/compact_literals.c diff --git a/ext/opcache/Optimizer/compact_vars.c b/Zend/Optimizer/compact_vars.c index bf7a005787..e70e189827 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 index 339b08167d..940f1b6ee2 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 index fe06de276b..fe06de276b 100644 --- a/ext/opcache/Optimizer/dfa_pass.c +++ b/Zend/Optimizer/dfa_pass.c diff --git a/ext/opcache/Optimizer/escape_analysis.c b/Zend/Optimizer/escape_analysis.c index c0d5081c1f..c0d5081c1f 100644 --- a/ext/opcache/Optimizer/escape_analysis.c +++ b/Zend/Optimizer/escape_analysis.c diff --git a/ext/opcache/Optimizer/nop_removal.c b/Zend/Optimizer/nop_removal.c index 32d2f10bf4..32d2f10bf4 100644 --- a/ext/opcache/Optimizer/nop_removal.c +++ b/Zend/Optimizer/nop_removal.c diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/Zend/Optimizer/optimize_func_calls.c index 319b17438d..319b17438d 100644 --- a/ext/opcache/Optimizer/optimize_func_calls.c +++ b/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 index 6f7400159d..6f7400159d 100644 --- a/ext/opcache/Optimizer/optimize_temp_vars_5.c +++ b/Zend/Optimizer/optimize_temp_vars_5.c diff --git a/ext/opcache/Optimizer/pass1.c b/Zend/Optimizer/pass1.c index 86774afef4..86774afef4 100644 --- a/ext/opcache/Optimizer/pass1.c +++ b/Zend/Optimizer/pass1.c diff --git a/ext/opcache/Optimizer/pass3.c b/Zend/Optimizer/pass3.c index f98c41848c..f98c41848c 100644 --- a/ext/opcache/Optimizer/pass3.c +++ b/Zend/Optimizer/pass3.c diff --git a/ext/opcache/Optimizer/sccp.c b/Zend/Optimizer/sccp.c index bc9dc38680..e097f654c8 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 index 89852e89e0..e414081987 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 index 1ab1cec3bd..1ab1cec3bd 100644 --- a/ext/opcache/Optimizer/scdf.h +++ b/Zend/Optimizer/scdf.h diff --git a/ext/opcache/Optimizer/ssa_integrity.c b/Zend/Optimizer/ssa_integrity.c index 47b9d6053e..4bd7705816 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 index 124596ea39..b0f3247cd7 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 index 2a3fb4380f..a456dcfbb8 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 index bbf8efb41a..973a93ef6c 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 index eb607c83c2..6fff720ed3 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 index 25a910ef71..b059f1f0ea 100644 --- a/ext/opcache/Optimizer/zend_dfg.c +++ b/Zend/Optimizer/zend_dfg.c @@ -242,7 +242,7 @@ add_op1_def: } /* }}} */ -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 index a675187794..6ec92be307 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 index cb835574d8..e2fdbbcbf7 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 index 3d8ff7ad7a..b0e0d7966b 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 index 228051ee86..073a054c0f 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 index 423d557f7a..53ad99c22e 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 index 92be7ee802..ba51283beb 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 @@ unknown_opcode: 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 index 11a9d74d75..8390946012 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 index 00c579491a..ae548fc520 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 index 04528d33e2..4b43255437 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 index 911eb79e64..911eb79e64 100644 --- a/ext/opcache/Optimizer/zend_optimizer_internal.h +++ b/Zend/Optimizer/zend_optimizer_internal.h diff --git a/ext/opcache/Optimizer/zend_ssa.c b/Zend/Optimizer/zend_ssa.c index ad3ff7022b..6fe97cbc1e 100644 --- a/ext/opcache/Optimizer/zend_ssa.c +++ b/Zend/Optimizer/zend_ssa.c @@ -768,7 +768,7 @@ add_op1_def: } /* }}} */ -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 index 68f39ad0ec..ddc9f95f43 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 index 2f3e3dd979..2f3e3dd979 100644 --- a/ext/opcache/Optimizer/zend_worklist.h +++ b/Zend/Optimizer/zend_worklist.h diff --git a/Zend/zend.c b/Zend/zend.c index 22cdc744e6..4da7991db6 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 a17f48c551..1151557446 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,12 +1473,33 @@ 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) -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/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 0ebe5a41ae..5101660a4a 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 @@ file_cache_fallback: 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 93d72fb73d..33c99c59c1 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 @@ -312,31 +312,9 @@ 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) - 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 diff --git a/ext/opcache/config.w32 b/ext/opcache/config.w32 index fb921c73da..a7f292ee76 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 a7d60812bd..64053cc056 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); |