29 if (!zend_bitset_in(def, var_num)) {
30 zend_bitset_incl(use, var_num);
38 if (!zend_bitset_in(def, var_num)) {
39 zend_bitset_incl(use, var_num);
46 if (!zend_bitset_in(def, var_num)) {
47 zend_bitset_incl(use, var_num);
74 if (!zend_bitset_in(def, var_num)) {
75 zend_bitset_incl(use, var_num);
78 zend_bitset_incl(def, var_num);
89 if (!zend_bitset_in(def, var_num)) {
90 zend_bitset_incl(use, var_num);
93 zend_bitset_incl(def, var_num);
104 if (!zend_bitset_in(def, var_num)) {
105 zend_bitset_incl(use, var_num);
108 zend_bitset_incl(def, var_num);
116 if (!zend_bitset_in(def, var_num)) {
117 zend_bitset_incl(use, var_num);
120 zend_bitset_incl(def, var_num);
129 if (!zend_bitset_in(def, var_num)) {
130 zend_bitset_incl(use, var_num);
139 if (!zend_bitset_in(def, var_num)) {
140 zend_bitset_incl(use, var_num);
190 if (!zend_bitset_in(def, var_num)) {
191 zend_bitset_incl(use, var_num);
196 if (!zend_bitset_in(def, var_num)) {
197 zend_bitset_incl(use, var_num);
248 _zend_dfg_add_use_def_op(op_array, opline, build_flags, use, def);
261 set_size = dfg->
size;
269 for (
j = 0;
j < blocks_count;
j++) {
281 for (; opline <
end; opline++) {
283 _zend_dfg_add_use_def_op(op_array, opline, build_flags, b_use, b_def);
290 uint32_t worklist_len = zend_bitset_len(blocks_count);
295 for (
j = 0;
j < blocks_count;
j++) {
296 zend_bitset_incl(worklist,
j);
298 while (!zend_bitset_empty(worklist, worklist_len)) {
301 j = zend_bitset_last(worklist, worklist_len);
302 zend_bitset_excl(worklist,
j);
307 if (blocks[
j].successors_count != 0) {
315 zend_bitset_union_with_difference(tmp,
DFG_BITSET(use, set_size,
j),
DFG_BITSET(
out, set_size,
j),
DFG_BITSET(def, set_size,
j), set_size);
316 if (!zend_bitset_equal(
DFG_BITSET(in, set_size,
j), tmp, set_size)) {
317 zend_bitset_copy(
DFG_BITSET(in, set_size,
j), tmp, set_size);
323 zend_bitset_incl(worklist, predecessors[k]);
memset(ptr, 0, type->size)
unsigned const char * end
zend_basic_block * blocks
#define ZEND_BITSET_ELM_SIZE
#define ZEND_BITSET_ALLOCA(n, use_heap)
struct _zend_basic_block zend_basic_block
#define ZEND_BB_REACHABLE
struct _zend_cfg zend_cfg
#define ZEND_SSA_RC_INFERENCE
#define ZEND_SSA_USE_CV_RESULTS
struct _zend_op_array zend_op_array
#define ZEND_ARRAY_ELEMENT_REF
#define ZEND_ACC_RETURN_REFERENCE
void zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg *dfg, uint32_t build_flags)
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)
struct _zend_dfg zend_dfg
#define DFG_BITSET(set, set_size, block_num)
#define ALLOCA_FLAG(name)
#define zend_always_inline
#define free_alloca(p, use_heap)
#define ZEND_ASSIGN_DIM_OP
#define ZEND_ASSIGN_STATIC_PROP_REF
#define ZEND_VERIFY_RETURN_TYPE
#define ZEND_FETCH_LIST_W
#define ZEND_ASSIGN_STATIC_PROP_OP
#define ZEND_FETCH_DIM_FUNC_ARG
#define ZEND_POST_DEC_OBJ
#define ZEND_FRAMELESS_ICALL_3
#define ZEND_ADD_ARRAY_ELEMENT
#define ZEND_ASSIGN_STATIC_PROP
#define ZEND_SEND_VAR_NO_REF_EX
#define ZEND_BIND_LEXICAL
#define ZEND_SEND_FUNC_ARG
#define ZEND_BIND_INIT_STATIC_OR_JMP
#define ZEND_ADD_ARRAY_UNPACK
#define ZEND_ASSIGN_OBJ_OP
#define ZEND_ASSIGN_OBJ_REF
#define ZEND_FETCH_DIM_UNSET
#define ZEND_SEND_VAR_NO_REF
#define ZEND_POST_INC_OBJ
#define ZEND_FETCH_DIM_RW