167 var->definition = -1;
173 _zend_ssa_remove_def(var);
180 _zend_ssa_remove_def(var);
187 _zend_ssa_remove_def(var);
196 if (ssa_op->op1_use == var) {
197 return ssa_op->op1_use_chain;
198 }
else if (ssa_op->op2_use == var) {
199 return ssa_op->op2_use_chain;
201 return ssa_op->res_use_chain;
208 return p->use_chains[0];
212 if (
p->sources[
j] == var) {
213 return p->use_chains[
j];
264#define NUM_PHI_SOURCES(phi) \
265 ((phi)->pi >= 0 ? 1 : (ssa->cfg.blocks[(phi)->block].predecessors_count))
269#define FOREACH_USE(var, use) do { \
270 int _var_num = (var) - ssa->vars, next; \
271 for (use = (var)->use_chain; use >= 0; use = next) { \
272 next = zend_ssa_next_use(ssa->ops, _var_num, use);
273#define FOREACH_USE_END() \
277#define FOREACH_PHI_USE(var, phi) do { \
278 int _var_num = (var) - ssa->vars; \
279 zend_ssa_phi *next_phi; \
280 for (phi = (var)->phi_use_chain; phi; phi = next_phi) { \
281 next_phi = zend_ssa_next_use_phi(ssa, _var_num, phi);
282#define FOREACH_PHI_USE_END() \
286#define FOREACH_PHI_SOURCE(phi, source) do { \
287 zend_ssa_phi *_phi = (phi); \
288 int _i, _end = NUM_PHI_SOURCES(phi); \
289 for (_i = 0; _i < _end; _i++) { \
290 ZEND_ASSERT(_phi->sources[_i] >= 0); \
291 source = _phi->sources[_i];
292#define FOREACH_PHI_SOURCE_END() \
296#define FOREACH_PHI(phi) do { \
298 for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
299 phi = ssa->blocks[_i].phis; \
300 for (; phi; phi = phi->next) {
301#define FOREACH_PHI_END() \
306#define FOREACH_BLOCK(block) do { \
308 for (_i = 0; _i < ssa->cfg.blocks_count; _i++) { \
309 (block) = &ssa->cfg.blocks[_i]; \
310 if (!((block)->flags & ZEND_BB_REACHABLE)) { \
313#define FOREACH_BLOCK_END() \
318#define FOREACH_INSTR_NUM(i) do { \
319 zend_basic_block *_block; \
320 FOREACH_BLOCK(_block) { \
321 uint32_t _end = _block->start + _block->len; \
322 for ((i) = _block->start; (i) < _end; (i)++) {
323#define FOREACH_INSTR_NUM_END() \
325 } FOREACH_BLOCK_END(); \
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
zend_basic_block * blocks
zend_ssa_phi * sym_use_chain
zend_ssa_phi ** use_chains
bool has_range_constraint
zend_ssa_pi_constraint constraint
zend_ssa_negative_lat negative
zend_ssa_phi * sym_use_chain
unsigned int escape_state
zend_ssa_phi * definition_phi
zend_ssa_phi * phi_use_chain
zend_ssa_var_info * var_info
zend_ssa_range_constraint range
zend_ssa_type_constraint type
struct _zend_arena zend_arena
struct _zend_cfg zend_cfg
struct _zend_op_array zend_op_array
struct _zend_script zend_script
#define zend_always_inline
struct _zend_class_entry zend_class_entry
void zend_ssa_remove_uses_of_var(zend_ssa *ssa, int var_num)
void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op)
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_phi(zend_ssa *ssa, zend_ssa_phi *phi)
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_rename_var_uses(zend_ssa *ssa, int old, int new, bool update_types)
void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to)
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)
void zend_ssa_remove_block_from_cfg(zend_ssa *ssa, int i)
ZEND_API void zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa)
void zend_ssa_remove_block(zend_op_array *op_array, zend_ssa *ssa, int i)
void zend_ssa_remove_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op)
struct _zend_ssa_range zend_ssa_range
struct _zend_ssa_block zend_ssa_block
@ ESCAPE_STATE_GLOBAL_ESCAPE
@ ESCAPE_STATE_FUNCTION_ESCAPE
void zend_ssa_rename_var_uses(zend_ssa *ssa, int old_var, int new_var, bool update_types)
struct _zend_ssa_type_constraint zend_ssa_type_constraint
union _zend_ssa_pi_constraint zend_ssa_pi_constraint
enum _zend_ssa_alias_kind zend_ssa_alias_kind
struct _zend_ssa zend_ssa
struct _zend_ssa_var zend_ssa_var
struct _zend_ssa_phi zend_ssa_phi
enum _zend_ssa_escape_state zend_ssa_escape_state
@ HTTP_RESPONSE_HEADER_ALIAS
struct _zend_ssa_op zend_ssa_op
struct _zend_ssa_var_info zend_ssa_var_info
struct _zend_ssa_range_constraint zend_ssa_range_constraint
enum _zend_ssa_negative_lat zend_ssa_negative_lat
ZEND_RESULT_CODE zend_result
#define ZEND_ADD_ARRAY_ELEMENT
#define ZEND_ADD_ARRAY_UNPACK