Do not consider a THEN block ending in an indirect jump for conditional compilation; Fix d30v warning

From-SVN: r35812
This commit is contained in:
Michael Meissner 2000-08-19 22:32:11 +00:00 committed by Michael Meissner
parent 9d6c2770a0
commit f1e42c8110
4 changed files with 24 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2000-08-19 Michael Meissner <meissner@redhat.com>
* ifcvt.c (find_if_block): Do not consider a THEN block that ends
in a indirect jump as a potential for conditional execution.
* d30v.h (d30v_init_expanders): Don't declare here.
* d30v-protos.h (d30v_init_expanders): Declare here with a valid
prototype.
Sat 19-Aug-2000 21:11:45 BST Neil Booth <NeilB@earthling.net>
* cpp.texi: Add @section for assertions.

View File

@ -132,6 +132,7 @@ extern void d30v_machine_dependent_reorg PARAMS ((rtx));
extern int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int));
extern rtx d30v_return_addr PARAMS ((void));
#endif
extern void d30v_init_expanders PARAMS ((void));
/* External variables referenced */

View File

@ -1953,7 +1953,7 @@ typedef struct d30v_stack {
once for every function before code is generated. */
#define INIT_EXPANDERS d30v_init_expanders ()
extern void d30v_init_expanders ();
/* Stack Checking. */

View File

@ -1500,11 +1500,23 @@ find_if_block (test_bb, then_edge, else_edge)
/* If the THEN block has no successors, conditional execution can still
make a conditional call. Don't do this unless the ELSE block has
only one incoming edge -- the CFG manipulation is too ugly otherwise. */
only one incoming edge -- the CFG manipulation is too ugly otherwise.
Check for the last insn of the THEN block being an indirect jump, which
is listed as not having any successors, but confuses the rest of the CE
code processing. XXX we should fix this in the future. */
if (then_succ == NULL)
{
if (else_bb->pred->pred_next == NULL_EDGE)
{
rtx last_insn = then_bb->end;
if (GET_CODE (last_insn) == NOTE)
last_insn = prev_nonnote_insn (last_insn);
if (GET_CODE (last_insn) == JUMP_INSN
&& ! simplejump_p (last_insn))
return FALSE;
join_bb = else_bb;
else_bb = NULL_BLOCK;
}