Commit 5c701bb1 by Jeff Sturm Committed by Jeff Sturm

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
parent c793eea7
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> 2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.c (find_file): Use ACONCAT in lieu of alloca/strcpy/strcat. * gcc.c (find_file): Use ACONCAT in lieu of alloca/strcpy/strcat.
......
...@@ -1865,6 +1865,7 @@ dw2_build_landing_pads () ...@@ -1865,6 +1865,7 @@ dw2_build_landing_pads ()
{ {
struct eh_region *region = cfun->eh->region_array[i]; struct eh_region *region = cfun->eh->region_array[i];
rtx seq; rtx seq;
bool clobbers_hard_regs = false;
/* Mind we don't process a region more than once. */ /* Mind we don't process a region more than once. */
if (!region || region->region_number != i) if (!region || region->region_number != i)
...@@ -1901,7 +1902,19 @@ dw2_build_landing_pads () ...@@ -1901,7 +1902,19 @@ dw2_build_landing_pads ()
if (r == INVALID_REGNUM) if (r == INVALID_REGNUM)
break; break;
if (! call_used_regs[r]) 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, emit_move_insn (cfun->eh->exc_ptr,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment