summaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-27 22:16:20 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-27 22:16:20 +0000
commit0814fb519110120ae530ab3c5cad3f9db97d2bda (patch)
tree66bd365666d5402108b000c5165337152aac93ff /gcc/optabs.c
parent06f08bd2bbb17d840a54276b3682bf93bb78d540 (diff)
downloadgcc-0814fb519110120ae530ab3c5cad3f9db97d2bda.tar.gz
* optabs.c (emit_no_conflict_block, emit_libcall_block): Avoid nesting
of libcall regions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51477 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 2abf67359c4..86c20b08d81 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -2739,11 +2739,18 @@ emit_no_conflict_block (insns, target, op0, op1, equiv)
these from the list. */
for (insn = insns; insn; insn = next)
{
- rtx set = 0;
+ rtx set = 0, note;
int i;
next = NEXT_INSN (insn);
+ /* Some ports (cris) create an libcall regions at their own. We must
+ avoid any potential nesting of LIBCALLs. */
+ if ((note = find_reg_note (insn, REG_LIBCALL, NULL)) != NULL)
+ remove_note (insn, note);
+ if ((note = find_reg_note (insn, REG_RETVAL, NULL)) != NULL)
+ remove_note (insn, note);
+
if (GET_CODE (PATTERN (insn)) == SET || GET_CODE (PATTERN (insn)) == USE
|| GET_CODE (PATTERN (insn)) == CLOBBER)
set = PATTERN (insn);
@@ -2906,6 +2913,14 @@ emit_libcall_block (insns, target, result, equiv)
for (insn = insns; insn; insn = next)
{
rtx set = single_set (insn);
+ rtx note;
+
+ /* Some ports (cris) create an libcall regions at their own. We must
+ avoid any potential nesting of LIBCALLs. */
+ if ((note = find_reg_note (insn, REG_LIBCALL, NULL)) != NULL)
+ remove_note (insn, note);
+ if ((note = find_reg_note (insn, REG_RETVAL, NULL)) != NULL)
+ remove_note (insn, note);
next = NEXT_INSN (insn);