@@ -1213,14 +1213,14 @@ static inline zend_ssa_phi **zend_ssa_next_use_phi_ptr(zend_ssa *ssa, int var, z
1213
1213
1214
1214
/* May be called even if source is not used in the phi (useful when removing uses in a phi
1215
1215
* with multiple identical operands) */
1216
- static inline void zend_ssa_remove_use_of_phi_source (zend_ssa * ssa , zend_ssa_phi * phi , int source ) /* {{{ */
1216
+ static inline void zend_ssa_remove_use_of_phi_source (zend_ssa * ssa , zend_ssa_phi * phi , int source , zend_ssa_phi * next_use_phi ) /* {{{ */
1217
1217
{
1218
1218
zend_ssa_phi * * cur = & ssa -> vars [source ].phi_use_chain ;
1219
1219
while (* cur && * cur != phi ) {
1220
1220
cur = zend_ssa_next_use_phi_ptr (ssa , source , * cur );
1221
1221
}
1222
1222
if (* cur ) {
1223
- * cur = zend_ssa_next_use_phi ( ssa , source , * cur ) ;
1223
+ * cur = next_use_phi ;
1224
1224
}
1225
1225
}
1226
1226
/* }}} */
@@ -1229,7 +1229,7 @@ static void zend_ssa_remove_uses_of_phi_sources(zend_ssa *ssa, zend_ssa_phi *phi
1229
1229
{
1230
1230
int source ;
1231
1231
FOREACH_PHI_SOURCE (phi , source ) {
1232
- zend_ssa_remove_use_of_phi_source (ssa , phi , source );
1232
+ zend_ssa_remove_use_of_phi_source (ssa , phi , source , zend_ssa_next_use_phi ( ssa , source , phi ) );
1233
1233
} FOREACH_PHI_SOURCE_END ();
1234
1234
}
1235
1235
/* }}} */
@@ -1289,7 +1289,7 @@ static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi,
1289
1289
}
1290
1290
1291
1291
/* Variable only used in one operand, remove the phi from the use chain. */
1292
- zend_ssa_remove_use_of_phi_source (ssa , phi , var_num );
1292
+ zend_ssa_remove_use_of_phi_source (ssa , phi , var_num , phi -> use_chains [ pred_offset ] );
1293
1293
phi -> use_chains [pred_offset ] = NULL ;
1294
1294
}
1295
1295
/* }}} */
0 commit comments