diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2008-09-04 18:47:35 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2008-09-04 18:47:35 +0000 |
commit | acb37d2924de4cd0195f41225e50ae9c46553cca (patch) | |
tree | 0390c7f4a5b7e1f97a36d75b74ddad1cb441e93a /gcc/ira-build.c | |
parent | e0c68ce9d288764b1706c1675804a308632d2919 (diff) | |
download | gcc-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.c | 4 |
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 |