55static inline void scdf_add_to_worklist(
scdf_ctx *scdf,
int var_num) {
69static inline void scdf_add_def_to_worklist(
scdf_ctx *scdf,
int var_num) {
78static inline uint32_t scdf_edge(
const zend_cfg *cfg,
int from,
int to) {
92static inline bool scdf_is_edge_feasible(
const scdf_ctx *scdf,
int from,
int to) {
93 uint32_t edge = scdf_edge(&scdf->
ssa->
cfg, from, to);
struct _scdf_ctx scdf_ctx
void scdf_init(zend_optimizer_ctx *ctx, scdf_ctx *scdf, zend_op_array *op_array, zend_ssa *ssa)
void scdf_solve(scdf_ctx *scdf, const char *name)
uint32_t scdf_remove_unreachable_blocks(scdf_ctx *scdf)
void scdf_mark_edge_feasible(scdf_ctx *scdf, int from, int to)
zend_bitset executable_blocks
zend_bitset instr_worklist
void(* visit_phi)(struct _scdf_ctx *scdf, zend_ssa_phi *phi)
void(* mark_feasible_successors)(struct _scdf_ctx *scdf, int block_num, zend_basic_block *block, zend_op *opline, zend_ssa_op *ssa_op)
uint32_t instr_worklist_len
uint32_t phi_var_worklist_len
void(* visit_instr)(struct _scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_op)
zend_bitset feasible_edges
uint32_t block_worklist_len
zend_bitset block_worklist
zend_bitset phi_var_worklist
zend_basic_block * blocks
zend_ssa_phi * definition_phi
struct _zend_basic_block zend_basic_block
struct _zend_cfg zend_cfg
struct _zend_op_array zend_op_array
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
struct _zend_optimizer_ctx zend_optimizer_ctx
#define ZEND_UNREACHABLE()
#define FOREACH_USE_END()
#define FOREACH_PHI_USE_END()
#define FOREACH_PHI_USE(var, phi)
struct _zend_ssa zend_ssa
struct _zend_ssa_var zend_ssa_var
#define FOREACH_USE(var, use)
struct _zend_ssa_phi zend_ssa_phi
struct _zend_ssa_op zend_ssa_op