summaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2000-07-21 00:07:33 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2000-07-21 00:07:33 +0000
commit2c59145b87ab545152364c5fbe052b5e414e0a88 (patch)
treef90d57c3d5e2996dc54ebe2a6fdefbf8714163ff /gcc/gcse.c
parent227be4e17be4bedb1f5317c98edcbf0a295566d6 (diff)
downloadgcc-2c59145b87ab545152364c5fbe052b5e414e0a88.tar.gz
* gcse.c (record_one_set): Prepend instead of append onto
reg_set_table, making it O(n) instead O(n^2). * lcm.c (compute_antinout_edge,compute_laterin,compute_available): Use a queue instead of a stack as worklist. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35158 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index aa3f7a711ce..224dd6bcfa1 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -1140,21 +1140,8 @@ record_one_set (regno, insn)
sizeof (struct reg_set));
bytes_used += sizeof (struct reg_set);
new_reg_info->insn = insn;
- new_reg_info->next = NULL;
- if (reg_set_table[regno] == NULL)
- reg_set_table[regno] = new_reg_info;
- else
- {
- reg_info_ptr1 = reg_info_ptr2 = reg_set_table[regno];
- /* ??? One could keep a "last" pointer to speed this up. */
- while (reg_info_ptr1 != NULL)
- {
- reg_info_ptr2 = reg_info_ptr1;
- reg_info_ptr1 = reg_info_ptr1->next;
- }
-
- reg_info_ptr2->next = new_reg_info;
- }
+ new_reg_info->next = reg_set_table[regno];
+ reg_set_table[regno] = new_reg_info;
}
/* Called from compute_sets via note_stores to handle one SET or CLOBBER in