diff options
author | Jan Hubicka <jh@suse.cz> | 2002-03-27 23:16:20 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2002-03-27 22:16:20 +0000 |
commit | 218aa620c4a1f7c2fadd6605d9ed5caee604079b (patch) | |
tree | 66bd365666d5402108b000c5165337152aac93ff | |
parent | e27a4eaf4f12cf7fcb1c2bed8a0f9ac539a309e6 (diff) | |
download | gcc-218aa620c4a1f7c2fadd6605d9ed5caee604079b.zip gcc-218aa620c4a1f7c2fadd6605d9ed5caee604079b.tar.gz gcc-218aa620c4a1f7c2fadd6605d9ed5caee604079b.tar.bz2 |
optabs.c (emit_no_conflict_block, [...]): Avoid nesting of libcall regions.
* optabs.c (emit_no_conflict_block, emit_libcall_block): Avoid nesting
of libcall regions.
From-SVN: r51477
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/optabs.c | 17 |
2 files changed, 21 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8cb6137..6ad87b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Mar 27 23:11:35 CET 2002 Jan Hubicka <jh@suse.cz> + + * optabs.c (emit_no_conflict_block, emit_libcall_block): Avoid nesting + of libcall regions. + Wed Mar 27 22:54:14 CET 2002 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> * cfgrtl.c (merge_blocks_nomove): Use set_block_for_insn instead of diff --git a/gcc/optabs.c b/gcc/optabs.c index 2abf673..86c20b0 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); |