From 961d411902f6869f8539b9c0ef668855af08a100 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Thu, 1 Oct 1998 13:00:52 -0600 Subject: [PATCH] regmove.c (regmove_optimize): Add variable old_max_uid. * regmove.c (regmove_optimize): Add variable old_max_uid. At the end of the function, update basic_block_end. From-SVN: r22724 --- gcc/ChangeLog | 5 +++++ gcc/regmove.c | 18 ++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f77ad08e99b..4905914731d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Oct 1 19:58:30 1998 Bernd Schmidt + + * regmove.c (regmove_optimize): Add variable old_max_uid. + At the end of the function, update basic_block_end. + Thu Oct 1 17:58:25 1998 David S. Miller * dwarf2out.c (expand_builtin_dwarf_reg_size): Use diff --git a/gcc/regmove.c b/gcc/regmove.c index 7f94be4ff89..41235f13704 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -917,6 +917,7 @@ regmove_optimize (f, nregs, regmove_dump_file) int nregs; FILE *regmove_dump_file; { + int old_max_uid = get_max_uid (); rtx insn; struct match match; int pass; @@ -926,8 +927,8 @@ regmove_optimize (f, nregs, regmove_dump_file) regno_src_regno = (int *)alloca (sizeof *regno_src_regno * nregs); for (i = nregs; --i >= 0; ) regno_src_regno[i] = -1; - regmove_bb_head = (int *)alloca (sizeof (int) * (get_max_uid () + 1)); - for (i = get_max_uid (); i >= 0; i--) regmove_bb_head[i] = -1; + regmove_bb_head = (int *)alloca (sizeof (int) * (old_max_uid + 1)); + for (i = old_max_uid; i >= 0; i--) regmove_bb_head[i] = -1; for (i = 0; i < n_basic_blocks; i++) regmove_bb_head[INSN_UID (basic_block_head[i])] = i; @@ -1384,6 +1385,19 @@ regmove_optimize (f, nregs, regmove_dump_file) } } #endif /* REGISTER_CONSTRAINTS */ + + /* In fixup_match_1, some insns may have been inserted after basic block + ends. Fix that here. */ + for (i = 0; i < n_basic_blocks; i++) + { + rtx end = basic_block_end[i]; + rtx new = end; + rtx next = NEXT_INSN (new); + while (next != 0 && INSN_UID (next) >= old_max_uid + && (i == n_basic_blocks - 1 || basic_block_head[i + 1] != next)) + new = next, next = NEXT_INSN (new); + basic_block_end[i] = new; + } } /* Returns the INSN_CODE for INSN if its pattern has matching constraints for -- 2.30.2