Commit f1e42c81 by Michael Meissner Committed by Michael Meissner

Do not consider a THEN block ending in an indirect jump for conditional…

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

From-SVN: r35812
parent 9d6c2770
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> Sat 19-Aug-2000 21:11:45 BST Neil Booth <NeilB@earthling.net>
* cpp.texi: Add @section for assertions. * cpp.texi: Add @section for assertions.
......
...@@ -132,6 +132,7 @@ extern void d30v_machine_dependent_reorg PARAMS ((rtx)); ...@@ -132,6 +132,7 @@ extern void d30v_machine_dependent_reorg PARAMS ((rtx));
extern int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int)); extern int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int));
extern rtx d30v_return_addr PARAMS ((void)); extern rtx d30v_return_addr PARAMS ((void));
#endif #endif
extern void d30v_init_expanders PARAMS ((void));
/* External variables referenced */ /* External variables referenced */
......
...@@ -1953,7 +1953,7 @@ typedef struct d30v_stack { ...@@ -1953,7 +1953,7 @@ typedef struct d30v_stack {
once for every function before code is generated. */ once for every function before code is generated. */
#define INIT_EXPANDERS d30v_init_expanders () #define INIT_EXPANDERS d30v_init_expanders ()
extern void d30v_init_expanders ();
/* Stack Checking. */ /* Stack Checking. */
......
...@@ -1500,11 +1500,23 @@ find_if_block (test_bb, then_edge, else_edge) ...@@ -1500,11 +1500,23 @@ find_if_block (test_bb, then_edge, else_edge)
/* If the THEN block has no successors, conditional execution can still /* If the THEN block has no successors, conditional execution can still
make a conditional call. Don't do this unless the ELSE block has 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 (then_succ == NULL)
{ {
if (else_bb->pred->pred_next == NULL_EDGE) 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; join_bb = else_bb;
else_bb = NULL_BLOCK; else_bb = NULL_BLOCK;
} }
......
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