Commit b3c54c8f by Steven Bosscher

re PR middle-end/40525 (if conversion (in dead_or_predicable) fails for targets…

re PR middle-end/40525 (if conversion (in dead_or_predicable) fails for targets with limited conditional execution support)

	PR middle-end/40525
	* ifcvt.c (dead_or_predicable): If predicating MERGE_BB fails,
	try the non-cond_exec path also.

From-SVN: r148961
parent f5e66865
2009-06-26 Steven Bosscher <steven@gcc.gnu.org>
PR middle-end/40525
* ifcvt.c (dead_or_predicable): If predicating MERGE_BB fails,
try the non-cond_exec path also.
2009-06-25 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2009-06-25 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/40468 PR target/40468
......
...@@ -3780,6 +3780,8 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb, ...@@ -3780,6 +3780,8 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
basic_block other_bb, basic_block new_dest, int reversep) basic_block other_bb, basic_block new_dest, int reversep)
{ {
rtx head, end, jump, earliest = NULL_RTX, old_dest, new_label = NULL_RTX; rtx head, end, jump, earliest = NULL_RTX, old_dest, new_label = NULL_RTX;
/* Number of pending changes. */
int n_validated_changes = 0;
jump = BB_END (test_bb); jump = BB_END (test_bb);
...@@ -3848,14 +3850,17 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb, ...@@ -3848,14 +3850,17 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
prob_val = GEN_INT (REG_BR_PROB_BASE - INTVAL (prob_val)); prob_val = GEN_INT (REG_BR_PROB_BASE - INTVAL (prob_val));
} }
if (! cond_exec_process_insns ((ce_if_block_t *)0, head, end, cond, if (cond_exec_process_insns (NULL, head, end, cond, prob_val, 0)
prob_val, 0)) && verify_changes (0))
goto cancel; n_validated_changes = num_validated_changes ();
else
cancel_changes (0);
earliest = jump; earliest = jump;
} }
else
#endif #endif
/* Try the NCE path if the CE path did not result in any changes. */
if (n_validated_changes == 0)
{ {
/* In the non-conditional execution case, we have to verify that there /* In the non-conditional execution case, we have to verify that there
are no trapping operations, no calls, no references to memory, and are no trapping operations, no calls, no references to memory, and
...@@ -3995,8 +4000,10 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb, ...@@ -3995,8 +4000,10 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
goto cancel; goto cancel;
} }
if (! apply_change_group ()) if (verify_changes (n_validated_changes))
return FALSE; confirm_change_group ();
else
goto cancel;
if (other_bb != new_dest) if (other_bb != new_dest)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment