summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-01-26 15:53:49 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-01-28 10:38:25 +0100
commit83be073abe665a219041ca1f54b6578b75643971 (patch)
treedd92e86fc1f77033c5afa860e6dfb261b02c3abd
parentac561f2c255e4786db4f0726d47f0e84100cd2ea (diff)
downloadphp-git-83be073abe665a219041ca1f54b6578b75643971.tar.gz
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 independently of opcache. Closes GH-6642.
-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.c5
-rw-r--r--configure.ac35
-rw-r--r--ext/opcache/ZendAccelerator.c7
-rw-r--r--ext/opcache/config.m422
-rw-r--r--ext/opcache/config.w322
-rw-r--r--win32/build/config.w322
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);