Commit 818aa0c5 by Eric Botcazou Committed by Eric Botcazou

basic-block.h (insert_insn_end_bb_new): Delete.

	* basic-block.h (insert_insn_end_bb_new): Delete.
	* cfgrtl.c (insert_insn_end_bb_new): Likewise.

From-SVN: r166212
parent 53dc5044
2010-11-02 Eric Botcazou <ebotcazou@adacore.com>
* basic-block.h (insert_insn_end_bb_new): Delete.
* cfgrtl.c (insert_insn_end_bb_new): Likewise.
2010-11-02 Uros Bizjak <ubizjak@gmail.com> 2010-11-02 Uros Bizjak <ubizjak@gmail.com>
H.J. Lu <hongjiu.lu@intel.com> H.J. Lu <hongjiu.lu@intel.com>
...@@ -881,9 +881,6 @@ extern basic_block get_bb_copy (basic_block); ...@@ -881,9 +881,6 @@ extern basic_block get_bb_copy (basic_block);
void set_loop_copy (struct loop *, struct loop *); void set_loop_copy (struct loop *, struct loop *);
struct loop *get_loop_copy (struct loop *); struct loop *get_loop_copy (struct loop *);
extern rtx insert_insn_end_bb_new (rtx, basic_block);
#include "cfghooks.h" #include "cfghooks.h"
/* Return true when one of the predecessor edges of BB is marked with EDGE_EH. */ /* Return true when one of the predecessor edges of BB is marked with EDGE_EH. */
......
...@@ -3090,94 +3090,6 @@ init_rtl_bb_info (basic_block bb) ...@@ -3090,94 +3090,6 @@ init_rtl_bb_info (basic_block bb)
bb->il.rtl = ggc_alloc_cleared_rtl_bb_info (); bb->il.rtl = ggc_alloc_cleared_rtl_bb_info ();
} }
/* Add EXPR to the end of basic block BB. */
rtx
insert_insn_end_bb_new (rtx pat, basic_block bb)
{
rtx insn = BB_END (bb);
rtx new_insn;
rtx pat_end = pat;
while (NEXT_INSN (pat_end) != NULL_RTX)
pat_end = NEXT_INSN (pat_end);
/* If the last insn is a jump, insert EXPR in front [taking care to
handle cc0, etc. properly]. Similarly we need to care trapping
instructions in presence of non-call exceptions. */
if (JUMP_P (insn)
|| (NONJUMP_INSN_P (insn)
&& (!single_succ_p (bb)
|| single_succ_edge (bb)->flags & EDGE_ABNORMAL)))
{
#ifdef HAVE_cc0
rtx note;
#endif
/* If this is a jump table, then we can't insert stuff here. Since
we know the previous real insn must be the tablejump, we insert
the new instruction just before the tablejump. */
if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
insn = prev_real_insn (insn);
#ifdef HAVE_cc0
/* FIXME: 'twould be nice to call prev_cc0_setter here but it aborts
if cc0 isn't set. */
note = find_reg_note (insn, REG_CC_SETTER, NULL_RTX);
if (note)
insn = XEXP (note, 0);
else
{
rtx maybe_cc0_setter = prev_nonnote_insn (insn);
if (maybe_cc0_setter
&& INSN_P (maybe_cc0_setter)
&& sets_cc0_p (PATTERN (maybe_cc0_setter)))
insn = maybe_cc0_setter;
}
#endif
/* FIXME: What if something in cc0/jump uses value set in new
insn? */
new_insn = emit_insn_before_noloc (pat, insn, bb);
}
/* Likewise if the last insn is a call, as will happen in the presence
of exception handling. */
else if (CALL_P (insn)
&& (!single_succ_p (bb)
|| single_succ_edge (bb)->flags & EDGE_ABNORMAL))
{
/* Keeping in mind targets with small register classes and parameters
in registers, we search backward and place the instructions before
the first parameter is loaded. Do this for everyone for consistency
and a presumption that we'll get better code elsewhere as well. */
/* Since different machines initialize their parameter registers
in different orders, assume nothing. Collect the set of all
parameter registers. */
insn = find_first_parameter_load (insn, BB_HEAD (bb));
/* If we found all the parameter loads, then we want to insert
before the first parameter load.
If we did not find all the parameter loads, then we might have
stopped on the head of the block, which could be a CODE_LABEL.
If we inserted before the CODE_LABEL, then we would be putting
the insn in the wrong basic block. In that case, put the insn
after the CODE_LABEL. Also, respect NOTE_INSN_BASIC_BLOCK. */
while (LABEL_P (insn)
|| NOTE_INSN_BASIC_BLOCK_P (insn))
insn = NEXT_INSN (insn);
new_insn = emit_insn_before_noloc (pat, insn, bb);
}
else
new_insn = emit_insn_after_noloc (pat, insn, bb);
return new_insn;
}
/* Returns true if it is possible to remove edge E by redirecting /* Returns true if it is possible to remove edge E by redirecting
it to the destination of the other edge from E->src. */ it to the destination of the other edge from E->src. */
......
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