diff options
author | J"orn Rennecke <joern.rennecke@st.com> | 2005-05-13 16:56:11 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2005-05-13 17:56:11 +0100 |
commit | 2d6c85d31464e0e26c381728795d959b14facf36 (patch) | |
tree | 13100fc3273a13143ae4328a09cbb1accb1ec438 /gcc/bt-load.c | |
parent | 30e5a198438e9b3e70aa7f668e9bf747424098b3 (diff) | |
download | gcc-2d6c85d31464e0e26c381728795d959b14facf36.tar.gz |
re PR rtl-optimization/20769 (bt-load.c doesn't take nonlocal gotos into account.)
PR rtl-optimization/20769:
* bt-load.c (compute_defs_uses_and_gen): Check for the blockage
pattern emitted by expand_nl_goto_receiver.
PR middle-end/20793:
* integrate.c (allocate_initial_values): Update register liveness
information.
From-SVN: r99668
Diffstat (limited to 'gcc/bt-load.c')
-rw-r--r-- | gcc/bt-load.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/bt-load.c b/gcc/bt-load.c index c8c94127c66..47ac16a82fb 100644 --- a/gcc/bt-load.c +++ b/gcc/bt-load.c @@ -506,6 +506,22 @@ compute_defs_uses_and_gen (fibheap_t all_btr_defs, btr_def *def_array, SET_BIT (btr_defset[regno - first_btr], insn_uid); note_other_use_this_block (regno, info.users_this_bb); } + /* Check for the blockage emitted by expand_nl_goto_receiver. */ + else if (current_function_has_nonlocal_label + && GET_CODE (PATTERN (insn)) == ASM_INPUT) + { + btr_user user; + + /* Do the equivalent of calling note_other_use_this_block + for every target register. */ + for (user = info.users_this_bb; user != NULL; + user = user->next) + if (user->use) + user->other_use_this_block = 1; + IOR_HARD_REG_SET (info.btrs_written_in_block, all_btrs); + IOR_HARD_REG_SET (info.btrs_live_in_block, all_btrs); + sbitmap_zero (info.bb_gen); + } else { if (btr_referenced_p (PATTERN (insn), NULL)) |