* optabs.c (emit_no_conflict_block, emit_libcall_block): Avoid nesting
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Mar 2002 22:16:20 +0000 (22:16 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Mar 2002 22:16:20 +0000 (22:16 +0000)
of libcall regions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51477 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/optabs.c

index 8cb6137..6ad87b7 100644 (file)
@@ -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
index 2abf673..86c20b0 100644 (file)
@@ -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);