diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2009-01-04 00:15:58 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2009-01-04 00:15:58 +0000 |
commit | fb0703f704d02beb8d886b695fe335ebde4a2ea2 (patch) | |
tree | 036cc581e08d7fcaf0a794b0ad2b240a2158cbc2 /libgfortran/io/open.c | |
parent | b5a430f346093aba1cb1e28aa7f92405e68b0ccd (diff) | |
download | gcc-fb0703f704d02beb8d886b695fe335ebde4a2ea2.zip gcc-fb0703f704d02beb8d886b695fe335ebde4a2ea2.tar.gz gcc-fb0703f704d02beb8d886b695fe335ebde4a2ea2.tar.bz2 |
re PR middle-end/38586 (quadratic behaviour in find_temp_slot_from_address.)
PR middle-end/38586
* function.c (struct temp_slot): Move to the section of the file
that deals with temp slots. Remove field 'address'.
(temp_slot_address_table): New hash table of address -> temp slot.
(struct temp_slot_address_entry): New struct, items for the table.
(temp_slot_address_compute_hash, temp_slot_address_hash,
temp_slot_address_eq, insert_temp_slot_address): Support functions
for the new table.
(find_temp_slot_from_address): Rewrite to use the new hash table.
(remove_unused_temp_slot_addresses): Remove addresses of temp
slots that have been made available.
(remove_unused_temp_slot_addresses_1): Call-back for htab_traverse,
worker function for remove_unused_temp_slot_addresses.
(assign_stack_temp_for_type): Don't clear the temp slot address list.
Add the temp slot address to the address -> temp slot map.
(update_temp_slot_address): Update via insert_temp_slot_address.
(free_temp_slots): Call remove_unused_temp_slot_addresses.
(pop_temp_slots): Likewise.
(init_temp_slots): Allocate the address -> temp slot map, or empty
the map if it is already allocated.
(prepare_function_start): Initialize temp slot processing.
From-SVN: r143041
Diffstat (limited to 'libgfortran/io/open.c')
0 files changed, 0 insertions, 0 deletions