mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 05:40:23 +08:00
except.c (dw2_build_landing_pads): New local clobbers_hard_regs.
* except.c (dw2_build_landing_pads): New local clobbers_hard_regs. Emit an ASM_INPUT as a scheduling barrier after clobbers. Fixes c++/4012. From-SVN: r45667
This commit is contained in:
parent
c793eea7ab
commit
5c701bb10c
@ -1,3 +1,9 @@
|
||||
2001-09-17 Jeff Sturm <jsturm@one-point.com>
|
||||
|
||||
* except.c (dw2_build_landing_pads): New local
|
||||
clobbers_hard_regs. Emit an ASM_INPUT as a scheduling
|
||||
barrier after clobbers. Fixes c++/4012.
|
||||
|
||||
2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* gcc.c (find_file): Use ACONCAT in lieu of alloca/strcpy/strcat.
|
||||
|
15
gcc/except.c
15
gcc/except.c
@ -1865,6 +1865,7 @@ dw2_build_landing_pads ()
|
||||
{
|
||||
struct eh_region *region = cfun->eh->region_array[i];
|
||||
rtx seq;
|
||||
bool clobbers_hard_regs = false;
|
||||
|
||||
/* Mind we don't process a region more than once. */
|
||||
if (!region || region->region_number != i)
|
||||
@ -1901,7 +1902,19 @@ dw2_build_landing_pads ()
|
||||
if (r == INVALID_REGNUM)
|
||||
break;
|
||||
if (! call_used_regs[r])
|
||||
emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, r)));
|
||||
{
|
||||
emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, r)));
|
||||
clobbers_hard_regs = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (clobbers_hard_regs)
|
||||
{
|
||||
/* @@@ This is a kludge. Not all machine descriptions define a
|
||||
blockage insn, but we must not allow the code we just generated
|
||||
to be reordered by scheduling. So emit an ASM_INPUT to act as
|
||||
blockage insn. */
|
||||
emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
|
||||
}
|
||||
|
||||
emit_move_insn (cfun->eh->exc_ptr,
|
||||
|
Loading…
x
Reference in New Issue
Block a user