Commit 2d6c85d3 by J"orn Rennecke Committed by Joern Rennecke

re PR rtl-optimization/20769 (bt-load.c doesn't take nonlocal gotos into account.)

	PR rtl-optimization/20769:
	* bt-load.c (compute_defs_uses_and_gen): Check for the blockage
	pattern emitted by expand_nl_goto_receiver.

	PR middle-end/20793:
	* integrate.c (allocate_initial_values): Update register liveness
	information.

From-SVN: r99668
parent 30e5a198
2005-05-13 J"orn Rennecke <joern.rennecke@st.com>
PR rtl-optimization/20769:
* bt-load.c (compute_defs_uses_and_gen): Check for the blockage
pattern emitted by expand_nl_goto_receiver.
PR middle-end/20793:
* integrate.c (allocate_initial_values): Update register liveness
information.
2005-05-13 Josh Conner <jconner@apple.com>
* arm.c (arm_return_in_memory): Add handling for vector return types.
......
......@@ -506,6 +506,22 @@ compute_defs_uses_and_gen (fibheap_t all_btr_defs, btr_def *def_array,
SET_BIT (btr_defset[regno - first_btr], insn_uid);
note_other_use_this_block (regno, info.users_this_bb);
}
/* Check for the blockage emitted by expand_nl_goto_receiver. */
else if (current_function_has_nonlocal_label
&& GET_CODE (PATTERN (insn)) == ASM_INPUT)
{
btr_user user;
/* Do the equivalent of calling note_other_use_this_block
for every target register. */
for (user = info.users_this_bb; user != NULL;
user = user->next)
if (user->use)
user->other_use_this_block = 1;
IOR_HARD_REG_SET (info.btrs_written_in_block, all_btrs);
IOR_HARD_REG_SET (info.btrs_live_in_block, all_btrs);
sbitmap_zero (info.bb_gen);
}
else
{
if (btr_referenced_p (PATTERN (insn), NULL))
......
......@@ -392,11 +392,23 @@ allocate_initial_values (rtx *reg_equiv_memory_loc ATTRIBUTE_UNUSED)
reg_equiv_memory_loc[regno] = x;
else
{
basic_block bb;
int new_regno;
gcc_assert (REG_P (x));
reg_renumber[regno] = REGNO (x);
new_regno = REGNO (x);
reg_renumber[regno] = new_regno;
/* Poke the regno right into regno_reg_rtx so that even
fixed regs are accepted. */
REGNO (ivs->entries[i].pseudo) = REGNO (x);
REGNO (ivs->entries[i].pseudo) = new_regno;
/* Update global register liveness information. */
FOR_EACH_BB (bb)
{
if (REGNO_REG_SET_P(bb->global_live_at_start, regno))
SET_REGNO_REG_SET (bb->global_live_at_start, new_regno);
if (REGNO_REG_SET_P(bb->global_live_at_end, regno))
SET_REGNO_REG_SET (bb->global_live_at_end, new_regno);
}
}
}
}
......
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