]> granicus.if.org Git - php/commitdiff
Move optimizer into core
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 26 Jan 2021 14:53:49 +0000 (15:53 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 28 Jan 2021 09:38:25 +0000 (10:38 +0100)
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.

39 files changed:
Zend/Optimizer/block_pass.c [moved from ext/opcache/Optimizer/block_pass.c with 100% similarity]
Zend/Optimizer/compact_literals.c [moved from ext/opcache/Optimizer/compact_literals.c with 100% similarity]
Zend/Optimizer/compact_vars.c [moved from ext/opcache/Optimizer/compact_vars.c with 99% similarity]
Zend/Optimizer/dce.c [moved from ext/opcache/Optimizer/dce.c with 99% similarity]
Zend/Optimizer/dfa_pass.c [moved from ext/opcache/Optimizer/dfa_pass.c with 100% similarity]
Zend/Optimizer/escape_analysis.c [moved from ext/opcache/Optimizer/escape_analysis.c with 100% similarity]
Zend/Optimizer/nop_removal.c [moved from ext/opcache/Optimizer/nop_removal.c with 100% similarity]
Zend/Optimizer/optimize_func_calls.c [moved from ext/opcache/Optimizer/optimize_func_calls.c with 100% similarity]
Zend/Optimizer/optimize_temp_vars_5.c [moved from ext/opcache/Optimizer/optimize_temp_vars_5.c with 100% similarity]
Zend/Optimizer/pass1.c [moved from ext/opcache/Optimizer/pass1.c with 100% similarity]
Zend/Optimizer/pass3.c [moved from ext/opcache/Optimizer/pass3.c with 100% similarity]
Zend/Optimizer/sccp.c [moved from ext/opcache/Optimizer/sccp.c with 99% similarity]
Zend/Optimizer/scdf.c [moved from ext/opcache/Optimizer/scdf.c with 99% similarity]
Zend/Optimizer/scdf.h [moved from ext/opcache/Optimizer/scdf.h with 100% similarity]
Zend/Optimizer/ssa_integrity.c [moved from ext/opcache/Optimizer/ssa_integrity.c with 99% similarity]
Zend/Optimizer/zend_call_graph.c [moved from ext/opcache/Optimizer/zend_call_graph.c with 94% similarity]
Zend/Optimizer/zend_call_graph.h [moved from ext/opcache/Optimizer/zend_call_graph.h with 84% similarity]
Zend/Optimizer/zend_cfg.c [moved from ext/opcache/Optimizer/zend_cfg.c with 98% similarity]
Zend/Optimizer/zend_cfg.h [moved from ext/opcache/Optimizer/zend_cfg.h with 93% similarity]
Zend/Optimizer/zend_dfg.c [moved from ext/opcache/Optimizer/zend_dfg.c with 98% similarity]
Zend/Optimizer/zend_dfg.h [moved from ext/opcache/Optimizer/zend_dfg.h with 92% similarity]
Zend/Optimizer/zend_dump.c [moved from ext/opcache/Optimizer/zend_dump.c with 98% similarity]
Zend/Optimizer/zend_dump.h [moved from ext/opcache/Optimizer/zend_dump.h with 79% similarity]
Zend/Optimizer/zend_func_info.c [moved from ext/opcache/Optimizer/zend_func_info.c with 99% similarity]
Zend/Optimizer/zend_func_info.h [moved from ext/opcache/Optimizer/zend_func_info.h with 97% similarity]
Zend/Optimizer/zend_inference.c [moved from ext/opcache/Optimizer/zend_inference.c with 99% similarity]
Zend/Optimizer/zend_inference.h [moved from ext/opcache/Optimizer/zend_inference.h with 88% similarity]
Zend/Optimizer/zend_optimizer.c [moved from ext/opcache/Optimizer/zend_optimizer.c with 99% similarity]
Zend/Optimizer/zend_optimizer.h [moved from ext/opcache/Optimizer/zend_optimizer.h with 97% similarity]
Zend/Optimizer/zend_optimizer_internal.h [moved from ext/opcache/Optimizer/zend_optimizer_internal.h with 100% similarity]
Zend/Optimizer/zend_ssa.c [moved from ext/opcache/Optimizer/zend_ssa.c with 99% similarity]
Zend/Optimizer/zend_ssa.h [moved from ext/opcache/Optimizer/zend_ssa.h with 96% similarity]
Zend/Optimizer/zend_worklist.h [moved from ext/opcache/Optimizer/zend_worklist.h with 100% similarity]
Zend/zend.c
configure.ac
ext/opcache/ZendAccelerator.c
ext/opcache/config.m4
ext/opcache/config.w32
win32/build/config.w32

similarity index 99%
rename from ext/opcache/Optimizer/compact_vars.c
rename to Zend/Optimizer/compact_vars.c
index bf7a00578739278731c3374ad657e37656bb8ed1..e70e1898279b3f46fc8620a10401a213cd4262ff 100644 (file)
@@ -16,7 +16,6 @@
    +----------------------------------------------------------------------+
 */
 
-#include "ZendAccelerator.h"
 #include "Optimizer/zend_optimizer_internal.h"
 #include "zend_bitset.h"
 
similarity index 99%
rename from ext/opcache/Optimizer/dce.c
rename to Zend/Optimizer/dce.c
index 339b08167da0f832d7682f0f4d9095a889676764..940f1b6ee2a4de46a5aa2f3335c7124e8de4056a 100644 (file)
@@ -17,7 +17,6 @@
    +----------------------------------------------------------------------+
 */
 
-#include "ZendAccelerator.h"
 #include "Optimizer/zend_optimizer_internal.h"
 #include "Optimizer/zend_inference.h"
 #include "Optimizer/zend_ssa.h"
similarity index 99%
rename from ext/opcache/Optimizer/sccp.c
rename to Zend/Optimizer/sccp.c
index bc9dc38680d4c728871d19f4e77011b419e497e3..e097f654c89f563df74a2d4d677bf22ebc533804 100644 (file)
@@ -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"
similarity index 99%
rename from ext/opcache/Optimizer/scdf.c
rename to Zend/Optimizer/scdf.c
index 89852e89e003222a29d52f2e90395db8a7321d02..e414081987ec1f5811f54777cd3a32dbf3bc59a5 100644 (file)
@@ -16,7 +16,6 @@
    +----------------------------------------------------------------------+
 */
 
-#include "ZendAccelerator.h"
 #include "Optimizer/zend_optimizer_internal.h"
 #include "Optimizer/scdf.h"
 
similarity index 99%
rename from ext/opcache/Optimizer/ssa_integrity.c
rename to Zend/Optimizer/ssa_integrity.c
index 47b9d6053e803cc483a0da0ab492f3a7a775680f..4bd7705816413bfeb9160f331ca02d048fa2e0f8 100644 (file)
@@ -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
similarity index 94%
rename from ext/opcache/Optimizer/zend_call_graph.c
rename to Zend/Optimizer/zend_call_graph.c
index 124596ea397a06e031611888bbe88adee0dae5b6..b0f3247cd72a9ef5ea33f40f3770902f8c2ac95d 100644 (file)
@@ -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) {
similarity index 84%
rename from ext/opcache/Optimizer/zend_call_graph.h
rename to Zend/Optimizer/zend_call_graph.h
index 2a3fb4380fcde88d5bcf886a0309c2daaed41f3b..a456dcfbb83e2839be73d764fcfd17180d92d557 100644 (file)
@@ -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()
 
similarity index 98%
rename from ext/opcache/Optimizer/zend_cfg.c
rename to Zend/Optimizer/zend_cfg.c
index bbf8efb41accab0b348103b91b51e137b3f44709..973a93ef6c4887c597b0e50351c4bc827824acc9 100644 (file)
@@ -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;
similarity index 93%
rename from ext/opcache/Optimizer/zend_cfg.h
rename to Zend/Optimizer/zend_cfg.h
index eb607c83c2f4c78aceb125415b055eed1272fda9..6fff720ed3ba6ec8031d883e916050ab82114f96 100644 (file)
@@ -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()
 
similarity index 98%
rename from ext/opcache/Optimizer/zend_dfg.c
rename to Zend/Optimizer/zend_dfg.c
index 25a910ef711a060cb562f35ce5e3e50ef23ecf61..b059f1f0eabfe1f336a16d9168fc716aa36252a1 100644 (file)
@@ -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);
 }
similarity index 92%
rename from ext/opcache/Optimizer/zend_dfg.h
rename to Zend/Optimizer/zend_dfg.h
index a675187794d647aa223070f8fcac928d4299b46d..6ec92be307d38d7807b3e8bae4913f1b6153d5fa 100644 (file)
@@ -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()
 
similarity index 98%
rename from ext/opcache/Optimizer/zend_dump.c
rename to Zend/Optimizer/zend_dump.c
index cb835574d88555aa430ab1fcb9ad261960cbdcc5..e2fdbbcbf73821d0746917100a9a184cbf86963d 100644 (file)
@@ -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;
similarity index 79%
rename from ext/opcache/Optimizer/zend_dump.h
rename to Zend/Optimizer/zend_dump.h
index 3d8ff7ad7a2776f50bbea6a420f8c76f57fd93f6..b0e0d7966bd41b97029d237a43938b4b29e3d199 100644 (file)
 
 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);
similarity index 99%
rename from ext/opcache/Optimizer/zend_func_info.c
rename to Zend/Optimizer/zend_func_info.c
index 228051ee86008563475a7e2689444488d47c13b2..073a054c0fd8fed45c6ad636bef786d9873f10e3 100644 (file)
@@ -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)
 {
similarity index 97%
rename from ext/opcache/Optimizer/zend_func_info.h
rename to Zend/Optimizer/zend_func_info.h
index 423d557f7ac76129db6bcd9c2db3591a50a613b2..53ad99c22eca13b0fee4fff11074e0a23abf1f1b 100644 (file)
@@ -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);
 
similarity index 99%
rename from ext/opcache/Optimizer/zend_inference.c
rename to Zend/Optimizer/zend_inference.c
index 92be7ee802fd6618936967f5da22e67b32b74b87..ba51283bebc006be610f8c40743d1731bd0b4de4 100644 (file)
@@ -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());
 }
similarity index 88%
rename from ext/opcache/Optimizer/zend_inference.h
rename to Zend/Optimizer/zend_inference.h
index 11a9d74d7576379d6ed94caf0e1f600e7474236e..839094601277b9eddf7949df4f5b9437a66a9a69 100644 (file)
@@ -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()
 
similarity index 99%
rename from ext/opcache/Optimizer/zend_optimizer.c
rename to Zend/Optimizer/zend_optimizer.c
index 00c579491a38db3a72a0c7597ecb8aab5b17faac..ae548fc5200bdda0c8a334757c669098f532808e 100644 (file)
@@ -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;
similarity index 97%
rename from ext/opcache/Optimizer/zend_optimizer.h
rename to Zend/Optimizer/zend_optimizer.h
index 04528d33e27f5b00511ca1e4b15a927fd162c150..4b432554379e0d58c4def235240db3517c925c84 100644 (file)
@@ -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
similarity index 99%
rename from ext/opcache/Optimizer/zend_ssa.c
rename to Zend/Optimizer/zend_ssa.c
index ad3ff7022b7b5292963467890402e778c2b943d3..6fe97cbc1e2aa4f69fcb3fc9df5d50a44ae0c553 100644 (file)
@@ -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;
similarity index 96%
rename from ext/opcache/Optimizer/zend_ssa.h
rename to Zend/Optimizer/zend_ssa.h
index 68f39ad0ecd15d4c00a44a0f61f43aebba77feb0..ddc9f95f43d81262bffc2dbaacc11f204da5fa3d 100644 (file)
@@ -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);
index 22cdc744e6409e87d52dd68ebbab032d258e06fd..4da7991db6d3b46120b881e6e2aad711ab11580f 100644 (file)
@@ -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();
 }
 /* }}} */
 
index a17f48c551fdf8cb9e7d8c20f41759ab5ce55d8f..11515574467b82ef78041d1f921e376ea9346555 100644 (file)
@@ -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)
index 0ebe5a41ae889667f97530a19f62ae1ecf000dd6..5101660a4ac26c883d2ab84d0e40e41ff5bea256 100644 (file)
@@ -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) {
index 93d72fb73d19b29e1953226132950baf5b4962ef..33c99c59c130fd60606ae29fc82edee112c06ceb 100644 (file)
@@ -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
index fb921c73daecd62c043d7eac22c61dfd82150f4a..a7f292ee7625f4d621aee39256799428a3c70c0f 100644 (file)
@@ -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);
 
 }
index a7d60812bd6f86fb66b8eb6e3638484998b52cb9..64053cc056367a2956952f040aa92970cd61a261 100644 (file)
@@ -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);