@@ -1224,14 +1224,14 @@ static inline zend_ssa_phi **zend_ssa_next_use_phi_ptr(zend_ssa *ssa, int var, z
1224
1224
1225
1225
/* May be called even if source is not used in the phi (useful when removing uses in a phi
1226
1226
* with multiple identical operands) */
1227
- static inline void zend_ssa_remove_use_of_phi_source (zend_ssa * ssa , zend_ssa_phi * phi , int source ) /* {{{ */
1227
+ 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 ) /* {{{ */
1228
1228
{
1229
1229
zend_ssa_phi * * cur = & ssa -> vars [source ].phi_use_chain ;
1230
1230
while (* cur && * cur != phi ) {
1231
1231
cur = zend_ssa_next_use_phi_ptr (ssa , source , * cur );
1232
1232
}
1233
1233
if (* cur ) {
1234
- * cur = zend_ssa_next_use_phi ( ssa , source , * cur ) ;
1234
+ * cur = next_use_phi ;
1235
1235
}
1236
1236
}
1237
1237
/* }}} */
@@ -1240,7 +1240,7 @@ static void zend_ssa_remove_uses_of_phi_sources(zend_ssa *ssa, zend_ssa_phi *phi
1240
1240
{
1241
1241
int source ;
1242
1242
FOREACH_PHI_SOURCE (phi , source ) {
1243
- zend_ssa_remove_use_of_phi_source (ssa , phi , source );
1243
+ zend_ssa_remove_use_of_phi_source (ssa , phi , source , zend_ssa_next_use_phi ( ssa , source , phi ) );
1244
1244
} FOREACH_PHI_SOURCE_END ();
1245
1245
}
1246
1246
/* }}} */
@@ -1300,7 +1300,7 @@ static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi,
1300
1300
}
1301
1301
1302
1302
/* Variable only used in one operand, remove the phi from the use chain. */
1303
- zend_ssa_remove_use_of_phi_source (ssa , phi , var_num );
1303
+ zend_ssa_remove_use_of_phi_source (ssa , phi , var_num , phi -> use_chains [ pred_offset ] );
1304
1304
phi -> use_chains [pred_offset ] = NULL ;
1305
1305
}
1306
1306
/* }}} */
0 commit comments