aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-const.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2009-11-26 21:41:42 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2009-11-26 21:41:42 +0000
commita96caf80851972e5f4e3e48a368f7e9d9bf450d2 (patch)
tree949d7357876cb59c5ee333ce2b11bbf51a4c5ec6 /gcc/fortran/trans-const.c
parent6bda9bdf522dc14c5deff16d364b19d1095d8a33 (diff)
downloadgcc-a96caf80851972e5f4e3e48a368f7e9d9bf450d2.zip
gcc-a96caf80851972e5f4e3e48a368f7e9d9bf450d2.tar.gz
gcc-a96caf80851972e5f4e3e48a368f7e9d9bf450d2.tar.bz2
re PR rtl-optimization/38582 (excessive time in rename registers)
PR rtl-opt/38582 * regrename.c (struct du_head): New members id, conflicts, hard_conflicts and cannot_rename. (enum scan_actions): Remove terminate_all_read and terminate_overlapping_read; add mark_all_read. (scan_actions_name): Likewise. (du_head_p): New typedef. Define a vector type for it. (id_to_chain): New static variable. (note_sets, clear_dead_regs): Delete functions. (free_chain_data): New function. (merge_overlapping_regs): Simply walk the conflicts bitmap. Remove argument B, all callers changed. (regrename_optimize): Allocate id_to_chain. Ignore chains that have the cannot_rename bit set. Update regno and nregs of a renamed chain. Call free_chain_data when done. (do_replace): Remove death notes when the renamed reg is set in the last insn; add them if not. (mark_conflict, note_sets_clobbers): New static function. (fail_current_block, current_id, open_chains_set, live_hard_regs): New static variables. (scan_rtx_reg): Keep track of conflicts between chains, and between chains and hard regs. Don't terminate chains when we find a read we can't handle, mark it unrenameable instead. For terminate_write, terminate chains that are written with an exact match or a superset of registers. Set fail_current_block if multi-word lifetimes are too complex to handle. (scan_rtx_address): Use mark_all_read instead of terminate_all_read. (build_def_use): Initialize current_id, live_chains and live_hard_regs; free memory for them when done. Rearrange the steps so that earlyclobbers are noted before reads are processed. Add new steps to keep track of hard register lifetimes outside insn operands. From-SVN: r154688
Diffstat (limited to 'gcc/fortran/trans-const.c')
0 files changed, 0 insertions, 0 deletions