aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira-build.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2008-09-04 18:47:35 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2008-09-04 18:47:35 +0000
commitacb37d2924de4cd0195f41225e50ae9c46553cca (patch)
tree0390c7f4a5b7e1f97a36d75b74ddad1cb441e93a /gcc/ira-build.c
parente0c68ce9d288764b1706c1675804a308632d2919 (diff)
downloadgcc-acb37d2924de4cd0195f41225e50ae9c46553cca.zip
gcc-acb37d2924de4cd0195f41225e50ae9c46553cca.tar.gz
gcc-acb37d2924de4cd0195f41225e50ae9c46553cca.tar.bz2
re PR middle-end/37243 (IRA causes wrong code generation)
gcc/ PR middle-end/37243 * ira-build.c (form_loop_tree): Reverse BB walk. (create_bb_allocnos): Likewise. * ira-lives.c (make_regno_born_and_dead, regs_set): Delete. (mark_reg_store): Rename to... (mark_ref_live): ...this and take a df_ref argument instead of note_stores arguments. Assert that we have a register. (mark_reg_clobber): Delete. (def_conflicts_with_inputs_p): New function. (mark_reg_conflicts): Delete. (mark_reg_death): Rename to... (mark_ref_dead): ...this and take a df_ref argument instead of a register. Assert that we have a register. (process_bb_node_lives): Hoist frequency calculation out of instruction walk. Convert from a forwards scan to a backwards scan. Use DF_REF_USES and DF_REF_DEFS instead of register notes and note_stores. Remove EH_RETURN_DATA_REGNO and regs_set handling. (create_allocno_live_ranges): Don't create regs_set. From-SVN: r139993
Diffstat (limited to 'gcc/ira-build.c')
-rw-r--r--gcc/ira-build.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/ira-build.c b/gcc/ira-build.c
index 4f2fb8f..6bd49c0 100644
--- a/gcc/ira-build.c
+++ b/gcc/ira-build.c
@@ -310,7 +310,7 @@ form_loop_tree (void)
ira_loop_nodes[i].children = NULL;
ira_loop_nodes[i].subloops = NULL;
}
- FOR_EACH_BB_REVERSE (bb)
+ FOR_EACH_BB (bb)
{
bb_node = &ira_bb_nodes[bb->index];
bb_node->bb = bb;
@@ -1343,7 +1343,7 @@ create_bb_allocnos (ira_loop_tree_node_t bb_node)
curr_bb = bb = bb_node->bb;
ira_assert (bb != NULL);
- FOR_BB_INSNS (bb, insn)
+ FOR_BB_INSNS_REVERSE (bb, insn)
if (INSN_P (insn))
create_insn_allocnos (PATTERN (insn), false);
/* It might be a allocno living through from one subloop to