In all cases, the returned *GSI points to the correct location. The
return value is true if insertion should be done after the location,
- or false if it should be done before the location. If new basic block
+ or false if it should be done before the location. If a new basic block
has to be created, it is stored in *NEW_BB. */
static bool
would have to examine the PHIs to prove that none of them used
the value set by the statement we want to insert on E. That
hardly seems worth the effort. */
-restart:
+ restart:
if (single_pred_p (dest)
- && ! phi_nodes (dest)
+ && gimple_seq_empty_p (phi_nodes (dest))
&& dest != EXIT_BLOCK_PTR)
{
*gsi = gsi_start_bb (dest);
if (!stmt_ends_bb_p (tmp))
return true;
- if (gimple_code (tmp) == GIMPLE_RETURN)
- {
- gsi_prev (gsi);
- return true;
+ switch (gimple_code (tmp))
+ {
+ case GIMPLE_RETURN:
+ case GIMPLE_RESX:
+ return false;
+ default:
+ break;
}
}