Skip to content

Commit 83be073

Browse files
committed
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 phpGH-6642.
1 parent ac561f2 commit 83be073

39 files changed

+104
-107
lines changed
File renamed without changes.

ext/opcache/Optimizer/compact_vars.c renamed to Zend/Optimizer/compact_vars.c

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
+----------------------------------------------------------------------+
1717
*/
1818

19-
#include "ZendAccelerator.h"
2019
#include "Optimizer/zend_optimizer_internal.h"
2120
#include "zend_bitset.h"
2221

ext/opcache/Optimizer/dce.c renamed to Zend/Optimizer/dce.c

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
+----------------------------------------------------------------------+
1818
*/
1919

20-
#include "ZendAccelerator.h"
2120
#include "Optimizer/zend_optimizer_internal.h"
2221
#include "Optimizer/zend_inference.h"
2322
#include "Optimizer/zend_ssa.h"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

ext/opcache/Optimizer/sccp.c renamed to Zend/Optimizer/sccp.c

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
#include "php.h"
2121
#include "zend_type_info.h"
22-
#include "ZendAccelerator.h"
2322
#include "Optimizer/zend_optimizer_internal.h"
2423
#include "Optimizer/zend_call_graph.h"
2524
#include "Optimizer/zend_inference.h"

ext/opcache/Optimizer/scdf.c renamed to Zend/Optimizer/scdf.c

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
+----------------------------------------------------------------------+
1717
*/
1818

19-
#include "ZendAccelerator.h"
2019
#include "Optimizer/zend_optimizer_internal.h"
2120
#include "Optimizer/scdf.h"
2221

File renamed without changes.

ext/opcache/Optimizer/ssa_integrity.c renamed to Zend/Optimizer/ssa_integrity.c

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
+----------------------------------------------------------------------+
1717
*/
1818

19-
#include "ZendAccelerator.h"
2019
#include "Optimizer/zend_optimizer_internal.h"
2120

2221
/* The ssa_verify_integrity() function ensures that that certain invariants of the SSA form and

ext/opcache/Optimizer/zend_call_graph.c renamed to Zend/Optimizer/zend_call_graph.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static void zend_op_array_collect(zend_op_array *op_array, void *context)
4444
call_graph->op_arrays_count++;
4545
}
4646

47-
int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info)
47+
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)
4848
{
4949
zend_op *opline = op_array->opcodes;
5050
zend_op *end = opline + op_array->last;
@@ -219,7 +219,7 @@ static void zend_sort_op_arrays(zend_call_graph *call_graph)
219219
// TODO: perform topological sort of cyclic call graph
220220
}
221221

222-
int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */
222+
ZEND_API int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */
223223
{
224224
call_graph->op_arrays_count = 0;
225225
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
233233
}
234234
/* }}} */
235235

236-
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */
236+
ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph) /* {{{ */
237237
{
238238
int i;
239239

@@ -245,7 +245,7 @@ void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_
245245
}
246246
/* }}} */
247247

248-
zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array) /* {{{ */
248+
ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array) /* {{{ */
249249
{
250250
zend_call_info **map, *call;
251251
if (!info->callee_info) {

ext/opcache/Optimizer/zend_call_graph.h renamed to Zend/Optimizer/zend_call_graph.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ typedef struct _zend_call_graph {
5959

6060
BEGIN_EXTERN_C()
6161

62-
int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
63-
void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
64-
zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array);
65-
int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info);
62+
ZEND_API int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
63+
ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
64+
ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array);
65+
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);
6666

6767
END_EXTERN_C()
6868

ext/opcache/Optimizer/zend_cfg.c renamed to Zend/Optimizer/zend_cfg.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ static void initialize_block(zend_basic_block *block) {
269269
block_map[i]++; \
270270
} while (0)
271271

272-
int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg) /* {{{ */
272+
ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg) /* {{{ */
273273
{
274274
uint32_t flags = 0;
275275
uint32_t i;
@@ -599,7 +599,7 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
599599
}
600600
/* }}} */
601601

602-
int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */
602+
ZEND_API int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */
603603
{
604604
int j, s, edges;
605605
zend_basic_block *b;
@@ -682,7 +682,7 @@ static void compute_postnum_recursive(
682682

683683
/* Computes dominator tree using algorithm from "A Simple, Fast Dominance Algorithm" by
684684
* Cooper, Harvey and Kennedy. */
685-
int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */
685+
ZEND_API int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */
686686
{
687687
zend_basic_block *blocks = cfg->blocks;
688688
int blocks_count = cfg->blocks_count;
@@ -795,7 +795,7 @@ static void swap_blocks(block_info *a, block_info *b) {
795795
*b = tmp;
796796
}
797797

798-
int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */
798+
ZEND_API int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */
799799
{
800800
int i, j, k, n;
801801
int time;

ext/opcache/Optimizer/zend_cfg.h renamed to Zend/Optimizer/zend_cfg.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,11 @@ typedef struct _zend_cfg {
116116

117117
BEGIN_EXTERN_C()
118118

119-
int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg);
119+
ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg);
120120
void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg);
121-
int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg);
122-
int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg);
123-
int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg);
121+
ZEND_API int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg);
122+
ZEND_API int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg);
123+
ZEND_API int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg);
124124

125125
END_EXTERN_C()
126126

ext/opcache/Optimizer/zend_dfg.c renamed to Zend/Optimizer/zend_dfg.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ static zend_always_inline void _zend_dfg_add_use_def_op(const zend_op_array *op_
242242
}
243243
/* }}} */
244244

245-
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) /* {{{ */
245+
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) /* {{{ */
246246
{
247247
_zend_dfg_add_use_def_op(op_array, opline, build_flags, use, def);
248248
}

ext/opcache/Optimizer/zend_dfg.h renamed to Zend/Optimizer/zend_dfg.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ typedef struct _zend_dfg {
4444
BEGIN_EXTERN_C()
4545

4646
int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg *dfg, uint32_t build_flags);
47-
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);
47+
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);
4848

4949
END_EXTERN_C()
5050

ext/opcache/Optimizer/zend_dump.c renamed to Zend/Optimizer/zend_dump.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint32_t fla
133133
}
134134
}
135135

136-
void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num)
136+
ZEND_API void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num)
137137
{
138138
if (var_type == IS_CV && var_num < op_array->last_var) {
139139
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_
332332
dump_flags);
333333
}
334334

335-
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)
335+
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)
336336
{
337337
if (ssa_var_num >= 0) {
338338
fprintf(stderr, "#%d.", ssa_var_num);
@@ -405,7 +405,7 @@ static void zend_dump_range_constraint(const zend_op_array *op_array, const zend
405405
}
406406
}
407407

408-
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)
408+
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)
409409
{
410410
const char *name = zend_get_opcode_name(opline->opcode);
411411
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)
881881
}
882882
}
883883

884-
void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data)
884+
ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data)
885885
{
886886
int i;
887887
const zend_cfg *cfg = NULL;

ext/opcache/Optimizer/zend_dump.h renamed to Zend/Optimizer/zend_dump.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030

3131
BEGIN_EXTERN_C()
3232

33-
void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data);
34-
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);
33+
ZEND_API void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, const char *msg, const void *data);
34+
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);
3535
void zend_dump_dominators(const zend_op_array *op_array, const zend_cfg *cfg);
3636
void zend_dump_dfg(const zend_op_array *op_array, const zend_cfg *cfg, const zend_dfg *dfg);
3737
void zend_dump_phi_placement(const zend_op_array *op_array, const zend_ssa *ssa);
3838
void zend_dump_variables(const zend_op_array *op_array);
3939
void zend_dump_ssa_variables(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t dump_flags);
40-
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);
41-
void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num);
40+
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);
41+
ZEND_API void zend_dump_var(const zend_op_array *op_array, zend_uchar var_type, int var_num);
4242
void zend_dump_op_array_name(const zend_op_array *op_array);
4343
void zend_dump_const(const zval *zv);
4444
void zend_dump_ht(HashTable *ht);

ext/opcache/Optimizer/zend_func_info.c renamed to Zend/Optimizer/zend_func_info.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,7 @@ static const func_info_t func_infos[] = {
837837
};
838838

839839
static HashTable func_info;
840-
int zend_func_info_rid = -1;
840+
ZEND_API int zend_func_info_rid = -1;
841841

842842
static uint32_t get_internal_func_info(
843843
const zend_call_info *call_info, const zend_ssa *ssa, zend_string *lcname) {
@@ -859,7 +859,7 @@ static uint32_t get_internal_func_info(
859859
}
860860
}
861861

862-
uint32_t zend_get_func_info(
862+
ZEND_API uint32_t zend_get_func_info(
863863
const zend_call_info *call_info, const zend_ssa *ssa,
864864
zend_class_entry **ce, bool *ce_is_instanceof)
865865
{

ext/opcache/Optimizer/zend_func_info.h renamed to Zend/Optimizer/zend_func_info.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ typedef struct _zend_call_info zend_call_info;
5454

5555
BEGIN_EXTERN_C()
5656

57-
extern int zend_func_info_rid;
57+
extern ZEND_API int zend_func_info_rid;
5858

59-
uint32_t zend_get_func_info(
59+
ZEND_API uint32_t zend_get_func_info(
6060
const zend_call_info *call_info, const zend_ssa *ssa,
6161
zend_class_entry **ce, bool *ce_is_instanceof);
6262

ext/opcache/Optimizer/zend_inference.c renamed to Zend/Optimizer/zend_inference.c

+11-12
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ static void zend_ssa_check_scc_var(const zend_op_array *op_array, zend_ssa *ssa,
207207
}
208208
/* }}} */
209209

210-
int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
210+
ZEND_API int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
211211
{
212212
int index = 0, *dfs, *root;
213213
zend_worklist_stack stack;
@@ -253,7 +253,7 @@ int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
253253
}
254254
/* }}} */
255255

256-
int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
256+
ZEND_API int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
257257
{
258258
zend_ssa_var *ssa_vars = ssa->vars;
259259
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
10031003
return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp);
10041004
}
10051005

1006-
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)
1006+
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)
10071007
{
10081008
zend_long op1_min, op2_min, op1_max, op2_max;
10091009

@@ -1955,7 +1955,7 @@ static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa
19551955
zend_error(E_WARNING, "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net", def_op_name);
19561956
}
19571957

1958-
uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert)
1958+
ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert)
19591959
{
19601960
uint32_t tmp = 0;
19611961

@@ -2198,7 +2198,7 @@ static uint32_t zend_convert_type_declaration_mask(uint32_t type_mask) {
21982198
return result_mask;
21992199
}
22002200

2201-
uint32_t zend_fetch_arg_info_type(const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce)
2201+
ZEND_API uint32_t zend_fetch_arg_info_type(const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce)
22022202
{
22032203
uint32_t tmp;
22042204

@@ -3596,7 +3596,7 @@ static zend_always_inline int _zend_update_type_info(
35963596
return SUCCESS;
35973597
}
35983598

3599-
int zend_update_type_info(
3599+
ZEND_API int zend_update_type_info(
36003600
const zend_op_array *op_array,
36013601
zend_ssa *ssa,
36023602
const zend_script *script,
@@ -3977,9 +3977,8 @@ static int is_recursive_tail_call(const zend_op_array *op_array,
39773977
return 0;
39783978
}
39793979

3980-
void zend_init_func_return_info(const zend_op_array *op_array,
3981-
const zend_script *script,
3982-
zend_ssa_var_info *ret)
3980+
ZEND_API void zend_init_func_return_info(
3981+
const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret)
39833982
{
39843983
if (op_array->fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
39853984
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
42244223
return SUCCESS;
42254224
}
42264225

4227-
int zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level) /* {{{ */
4226+
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) /* {{{ */
42284227
{
42294228
zend_ssa_var_info *ssa_var_info;
42304229
int i;
@@ -4296,7 +4295,7 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array)
42964295
free_alloca(worklist, use_heap);
42974296
}
42984297

4299-
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)
4298+
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)
43004299
{
43014300
if (opline->op1_type == IS_CV) {
43024301
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
46754674
}
46764675
}
46774676

4678-
int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
4677+
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)
46794678
{
46804679
return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO());
46814680
}

ext/opcache/Optimizer/zend_inference.h renamed to Zend/Optimizer/zend_inference.h

+14-18
Original file line numberDiff line numberDiff line change
@@ -250,42 +250,38 @@ static zend_always_inline bool zend_sub_will_overflow(zend_long a, zend_long b)
250250

251251
BEGIN_EXTERN_C()
252252

253-
int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
254-
int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
255-
int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level);
253+
ZEND_API int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
254+
ZEND_API int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
255+
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);
256256

257-
uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert);
257+
ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert);
258258

259259
int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int var, int widening, int narrowing, zend_ssa_range *tmp);
260-
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);
260+
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);
261261
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);
262262
int zend_inference_narrowing_meet(zend_ssa_var_info *var_info, zend_ssa_range *r);
263263
int zend_inference_widening_meet(zend_ssa_var_info *var_info, zend_ssa_range *r);
264264
void zend_inference_check_recursive_dependencies(zend_op_array *op_array);
265265

266266
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);
267267

268-
uint32_t zend_fetch_arg_info_type(
268+
ZEND_API uint32_t zend_fetch_arg_info_type(
269269
const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce);
270-
void zend_init_func_return_info(const zend_op_array *op_array,
271-
const zend_script *script,
272-
zend_ssa_var_info *ret);
270+
ZEND_API void zend_init_func_return_info(
271+
const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret);
273272
void zend_func_return_info(const zend_op_array *op_array,
274273
const zend_script *script,
275274
int recursive,
276275
int widening,
277276
zend_ssa_var_info *ret);
278277

279-
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);
280-
int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa);
278+
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);
279+
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);
281280

282-
int zend_update_type_info(const zend_op_array *op_array,
283-
zend_ssa *ssa,
284-
const zend_script *script,
285-
zend_op *opline,
286-
zend_ssa_op *ssa_op,
287-
const zend_op **ssa_opcodes,
288-
zend_long optimization_level);
281+
ZEND_API int zend_update_type_info(
282+
const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script,
283+
zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes,
284+
zend_long optimization_level);
289285

290286
END_EXTERN_C()
291287

0 commit comments

Comments
 (0)