@@ -25,21 +25,19 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
25
25
int set_size ;
26
26
zend_basic_block * blocks = cfg -> blocks ;
27
27
int blocks_count = cfg -> blocks_count ;
28
- zend_bitset tmp , gen , def , use , in , out ;
28
+ zend_bitset tmp , def , use , in , out ;
29
29
zend_op * opline ;
30
30
uint32_t k , var_num ;
31
31
int j ;
32
32
33
- /* FIXME: can we use "gen" instead of "def" for flow analyzing? */
34
33
set_size = dfg -> size ;
35
34
tmp = dfg -> tmp ;
36
- gen = dfg -> gen ;
37
35
def = dfg -> def ;
38
36
use = dfg -> use ;
39
37
in = dfg -> in ;
40
38
out = dfg -> out ;
41
39
42
- /* Collect "gen", " def" and "use" sets */
40
+ /* Collect "def" and "use" sets */
43
41
for (j = 0 ; j < blocks_count ; j ++ ) {
44
42
if ((blocks [j ].flags & ZEND_BB_REACHABLE ) == 0 ) {
45
43
continue ;
@@ -84,6 +82,9 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
84
82
goto op1_def ;
85
83
}
86
84
goto op1_use ;
85
+ case ZEND_UNSET_VAR :
86
+ ZEND_ASSERT (opline -> extended_value & ZEND_QUICK_SET );
87
+ /* break missing intentionally */
87
88
case ZEND_ASSIGN :
88
89
case ZEND_ASSIGN_REF :
89
90
case ZEND_BIND_GLOBAL :
@@ -92,17 +93,6 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
92
93
case ZEND_SEND_REF :
93
94
case ZEND_SEND_VAR_NO_REF :
94
95
case ZEND_FE_RESET_RW :
95
- op1_def :
96
- if (!DFG_ISSET (use , set_size , j , var_num )) {
97
- // FIXME: include into "use" to ...?
98
- DFG_SET (use , set_size , j , var_num );
99
- DFG_SET (def , set_size , j , var_num );
100
- }
101
- DFG_SET (gen , set_size , j , var_num );
102
- break ;
103
- case ZEND_UNSET_VAR :
104
- ZEND_ASSERT (opline -> extended_value & ZEND_QUICK_SET );
105
- /* break missing intentionally */
106
96
case ZEND_ASSIGN_ADD :
107
97
case ZEND_ASSIGN_SUB :
108
98
case ZEND_ASSIGN_MUL :
@@ -132,7 +122,11 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
132
122
case ZEND_FETCH_OBJ_FUNC_ARG :
133
123
case ZEND_FETCH_OBJ_UNSET :
134
124
case ZEND_VERIFY_RETURN_TYPE :
135
- DFG_SET (gen , set_size , j , var_num );
125
+ op1_def :
126
+ // FIXME: include into "use" too ...?
127
+ DFG_SET (use , set_size , j , var_num );
128
+ DFG_SET (def , set_size , j , var_num );
129
+ break ;
136
130
default :
137
131
op1_use :
138
132
if (!DFG_ISSET (def , set_size , j , var_num )) {
@@ -142,9 +136,9 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
142
136
} else if (opline -> op1_type & (IS_VAR |IS_TMP_VAR )) {
143
137
var_num = EX_VAR_TO_NUM (opline -> op1 .var );
144
138
if (opline -> opcode == ZEND_VERIFY_RETURN_TYPE ) {
145
- DFG_SET (gen , set_size , j , var_num );
146
- }
147
- if (!DFG_ISSET (def , set_size , j , var_num )) {
139
+ DFG_SET (use , set_size , j , var_num );
140
+ DFG_SET ( def , set_size , j , var_num );
141
+ } else if (!DFG_ISSET (def , set_size , j , var_num )) {
148
142
DFG_SET (use , set_size , j , var_num );
149
143
}
150
144
}
@@ -165,12 +159,9 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
165
159
case ZEND_FE_FETCH_R :
166
160
case ZEND_FE_FETCH_RW :
167
161
op2_def :
168
- if (!DFG_ISSET (use , set_size , j , var_num )) {
169
- // FIXME: include into "use" to ...?
170
- DFG_SET (use , set_size , j , var_num );
171
- DFG_SET (def , set_size , j , var_num );
172
- }
173
- DFG_SET (gen , set_size , j , var_num );
162
+ // FIXME: include into "use" too ...?
163
+ DFG_SET (use , set_size , j , var_num );
164
+ DFG_SET (def , set_size , j , var_num );
174
165
break ;
175
166
default :
176
167
op2_use :
@@ -182,10 +173,7 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
182
173
} else if (opline -> op2_type & (IS_VAR |IS_TMP_VAR )) {
183
174
var_num = EX_VAR_TO_NUM (opline -> op2 .var );
184
175
if (opline -> opcode == ZEND_FE_FETCH_R || opline -> opcode == ZEND_FE_FETCH_RW ) {
185
- if (!DFG_ISSET (use , set_size , j , var_num )) {
186
- DFG_SET (def , set_size , j , var_num );
187
- }
188
- DFG_SET (gen , set_size , j , var_num );
176
+ DFG_SET (def , set_size , j , var_num );
189
177
} else {
190
178
if (!DFG_ISSET (def , set_size , j , var_num )) {
191
179
DFG_SET (use , set_size , j , var_num );
@@ -194,10 +182,7 @@ int zend_build_dfg(const zend_op_array *op_array, const zend_cfg *cfg, zend_dfg
194
182
}
195
183
if (opline -> result_type & (IS_CV |IS_VAR |IS_TMP_VAR )) {
196
184
var_num = EX_VAR_TO_NUM (opline -> result .var );
197
- if (!DFG_ISSET (use , set_size , j , var_num )) {
198
- DFG_SET (def , set_size , j , var_num );
199
- }
200
- DFG_SET (gen , set_size , j , var_num );
185
+ DFG_SET (def , set_size , j , var_num );
201
186
}
202
187
}
203
188
}
0 commit comments