Go to the source code of this file.
|
enum | _zend_ssa_negative_lat {
NEG_NONE = 0
, NEG_INIT = 1
, NEG_INVARIANT = 2
, NEG_USE_LT = 3
,
NEG_USE_GT = 4
, NEG_UNKNOWN = 5
} |
|
enum | _zend_ssa_alias_kind { NO_ALIAS
, SYMTABLE_ALIAS
, HTTP_RESPONSE_HEADER_ALIAS
} |
|
enum | _zend_ssa_escape_state { ESCAPE_STATE_UNKNOWN
, ESCAPE_STATE_NO_ESCAPE
, ESCAPE_STATE_FUNCTION_ESCAPE
, ESCAPE_STATE_GLOBAL_ESCAPE
} |
|
|
ZEND_API zend_result | 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 void | 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) |
|
void | zend_ssa_unlink_use_chain (zend_ssa *ssa, int op, int var) |
|
void | zend_ssa_replace_use_chain (zend_ssa *ssa, int op, int new_op, int var) |
|
void | zend_ssa_remove_predecessor (zend_ssa *ssa, int from, int to) |
|
void | zend_ssa_remove_defs_of_instr (zend_ssa *ssa, zend_ssa_op *ssa_op) |
|
void | zend_ssa_remove_instr (zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op) |
|
void | zend_ssa_remove_phi (zend_ssa *ssa, zend_ssa_phi *phi) |
|
void | zend_ssa_remove_uses_of_var (zend_ssa *ssa, int var_num) |
|
void | zend_ssa_remove_block (zend_op_array *op_array, zend_ssa *ssa, int b) |
|
void | zend_ssa_rename_var_uses (zend_ssa *ssa, int old_var, int new_var, bool update_types) |
|
void | zend_ssa_remove_block_from_cfg (zend_ssa *ssa, int b) |
|
◆ FOREACH_BLOCK
#define FOREACH_BLOCK |
( |
| block | ) |
|
Value: do { \
int _i; \
for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
(block) = &ssa->cfg.blocks[_i]; \
continue; \
}
#define ZEND_BB_REACHABLE
Definition at line 306 of file zend_ssa.h.
◆ FOREACH_BLOCK_END
◆ FOREACH_INSTR_NUM
#define FOREACH_INSTR_NUM |
( |
| i | ) |
|
Value: do { \
FOREACH_BLOCK(_block) { \
uint32_t _end = _block->
start + _block->
len; \
for ((i) = _block->
start; (i) < _end; (i)++) {
struct _zend_basic_block zend_basic_block
Definition at line 318 of file zend_ssa.h.
◆ FOREACH_INSTR_NUM_END
#define FOREACH_INSTR_NUM_END |
( |
| ) |
|
Value: } \
} while (0)
#define FOREACH_BLOCK_END()
Definition at line 323 of file zend_ssa.h.
◆ FOREACH_PHI
Value: do { \
int _i; \
for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
phi = ssa->blocks[_i].phis; \
for (; phi; phi = phi->next) {
Definition at line 296 of file zend_ssa.h.
◆ FOREACH_PHI_END
◆ FOREACH_PHI_SOURCE
#define FOREACH_PHI_SOURCE |
( |
| phi, |
|
|
| source ) |
Value: do { \
for (_i = 0; _i < _end; _i++) { \
ZEND_ASSERT(_phi->
sources[_i] >= 0); \
struct _zend_ssa_phi zend_ssa_phi
#define NUM_PHI_SOURCES(phi)
Definition at line 286 of file zend_ssa.h.
◆ FOREACH_PHI_SOURCE_END
#define FOREACH_PHI_SOURCE_END |
( |
| ) |
|
◆ FOREACH_PHI_USE
#define FOREACH_PHI_USE |
( |
| var, |
|
|
| phi ) |
Value: do { \
int _var_num = (var) - ssa->vars; \
for (phi = (var)->phi_use_chain; phi; phi = next_phi) { \
next_phi = zend_ssa_next_use_phi(ssa, _var_num, phi);
Definition at line 277 of file zend_ssa.h.
◆ FOREACH_PHI_USE_END
#define FOREACH_PHI_USE_END |
( |
| ) |
|
◆ FOREACH_USE
#define FOREACH_USE |
( |
| var, |
|
|
| use ) |
Value: do { \
int _var_num = (var) - ssa->vars,
next; \
for (use = (var)->use_chain; use >= 0; use =
next) { \
next = zend_ssa_next_use(ssa->ops, _var_num, use);
Definition at line 269 of file zend_ssa.h.
◆ FOREACH_USE_END
◆ NUM_PHI_SOURCES
#define NUM_PHI_SOURCES |
( |
| phi | ) |
|
Value: ((phi)->pi >= 0 ? 1 : (ssa->cfg.blocks[(phi)->block].predecessors_count))
Definition at line 264 of file zend_ssa.h.
◆ zend_ssa
◆ zend_ssa_alias_kind
◆ zend_ssa_block
◆ zend_ssa_escape_state
◆ zend_ssa_negative_lat
◆ zend_ssa_op
◆ zend_ssa_phi
◆ zend_ssa_pi_constraint
◆ zend_ssa_range
◆ zend_ssa_range_constraint
◆ zend_ssa_type_constraint
◆ zend_ssa_var
◆ zend_ssa_var_info
◆ _zend_ssa_alias_kind
Enumerator |
---|
NO_ALIAS | |
SYMTABLE_ALIAS | |
HTTP_RESPONSE_HEADER_ALIAS | |
Definition at line 94 of file zend_ssa.h.
◆ _zend_ssa_escape_state
Enumerator |
---|
ESCAPE_STATE_UNKNOWN | |
ESCAPE_STATE_NO_ESCAPE | |
ESCAPE_STATE_FUNCTION_ESCAPE | |
ESCAPE_STATE_GLOBAL_ESCAPE | |
Definition at line 100 of file zend_ssa.h.
◆ _zend_ssa_negative_lat
Enumerator |
---|
NEG_NONE | |
NEG_INIT | |
NEG_INVARIANT | |
NEG_USE_LT | |
NEG_USE_GT | |
NEG_UNKNOWN | |
Definition at line 32 of file zend_ssa.h.
◆ zend_build_ssa()
◆ zend_ssa_compute_use_def_chains()
◆ zend_ssa_remove_block()
◆ zend_ssa_remove_block_from_cfg()
void zend_ssa_remove_block_from_cfg |
( |
zend_ssa * | ssa, |
|
|
int | b ) |
◆ zend_ssa_remove_defs_of_instr()
◆ zend_ssa_remove_instr()
◆ zend_ssa_remove_phi()
◆ zend_ssa_remove_predecessor()
void zend_ssa_remove_predecessor |
( |
zend_ssa * | ssa, |
|
|
int | from, |
|
|
int | to ) |
◆ zend_ssa_remove_uses_of_var()
void zend_ssa_remove_uses_of_var |
( |
zend_ssa * | ssa, |
|
|
int | var_num ) |
◆ zend_ssa_rename_op()
◆ zend_ssa_rename_var_uses()
void zend_ssa_rename_var_uses |
( |
zend_ssa * | ssa, |
|
|
int | old_var, |
|
|
int | new_var, |
|
|
bool | update_types ) |
◆ zend_ssa_replace_use_chain()
void zend_ssa_replace_use_chain |
( |
zend_ssa * | ssa, |
|
|
int | op, |
|
|
int | new_op, |
|
|
int | var ) |
◆ zend_ssa_unlink_use_chain()
void zend_ssa_unlink_use_chain |
( |
zend_ssa * | ssa, |
|
|
int | op, |
|
|
int | var ) |