Makefile.in (optabs.o): Add dependency on basic-block.h.
authorJosef Zlomek <zlomj9am@artax.karlin.mff.cuni.cz>
Thu, 9 Jan 2003 11:47:35 +0000 (12:47 +0100)
committerJosef Zlomek <zlomek@gcc.gnu.org>
Thu, 9 Jan 2003 11:47:35 +0000 (11:47 +0000)
* Makefile.in (optabs.o): Add dependency on basic-block.h.
* basic-block.h (control_flow_insn_p): Fuction was exported.
* cfgbuild.c (control_flow_insn_p): Fuction was made non-static.
* optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL
notes only when the region is contained in a single basic block.

From-SVN: r61101

gcc/ChangeLog
gcc/Makefile.in
gcc/basic-block.h
gcc/cfgbuild.c
gcc/optabs.c

index 96ca06396ff3c910ebf4865bb3fca9c1ffc1ba2e..c0689759663f7034c98c6a41176417b43edca9dc 100644 (file)
@@ -1,3 +1,11 @@
+2003-01-09  Josef Zlomek  <zlomj9am@artax.karlin.mff.cuni.cz>
+
+       * Makefile.in (optabs.o): Add dependency on basic-block.h.
+       * basic-block.h (control_flow_insn_p): Fuction was exported.
+       * cfgbuild.c (control_flow_insn_p): Fuction was made non-static.
+       * optabs.c (emit_libcall_block): Emit REG_LIBCALL and REG_RETVAL
+       notes only when the region is contained in a single basic block.
+
 2003-01-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        PR inline-asm/8832
index 01b3f4b6edc0f922968d5fd8a1b73b26065d102f..5ffdce2a9fb84b03bd973bb18351830f7a546f0c 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile for GNU C compiler.
 #   Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
-#   1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+#   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 #This file is part of GCC.
 
@@ -1463,7 +1463,7 @@ explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_
    toplev.h function.h ggc.h $(TM_P_H) gt-explow.h
 optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
    flags.h insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
-   toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h
+   toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h $(BASIC_BLOCK_H)
 dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
    flags.h $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
    insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h
index 47b5063124a212f222243288d7415f26608a225c..78b7ac6b3f4a9483fe32351357b1cf4bcec0f920 100644 (file)
@@ -1,5 +1,5 @@
 /* Define control and data flow tables, and regsets.
-   Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002
+   Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -806,6 +806,7 @@ extern void fixup_abnormal_edges    PARAMS ((void));
 extern bool can_hoist_insn_p           PARAMS ((rtx, rtx, regset));
 extern rtx hoist_insn_after            PARAMS ((rtx, rtx, rtx, rtx));
 extern rtx hoist_insn_to_edge          PARAMS ((rtx, edge, rtx, rtx));
+extern bool control_flow_insn_p                PARAMS ((rtx));
 
 /* In dominance.c */
 
index 43acb9076ece5a8ffbda7a737267e450c7b340dc..7bc33f248d0e19c2531d04b9f5c68d4e5aa9fe7c 100644 (file)
@@ -1,6 +1,6 @@
 /* Control flow graph building code for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -59,7 +59,6 @@ static void make_eh_edge              PARAMS ((sbitmap *, basic_block, rtx));
 static void find_bb_boundaries         PARAMS ((basic_block));
 static void compute_outgoing_frequencies PARAMS ((basic_block));
 static bool inside_basic_block_p       PARAMS ((rtx));
-static bool control_flow_insn_p                PARAMS ((rtx));
 \f
 /* Return true if insn is something that should be contained inside basic
    block.  */
@@ -97,7 +96,7 @@ inside_basic_block_p (insn)
 /* Return true if INSN may cause control flow transfer, so it should be last in
    the basic block.  */
 
-static bool
+bool
 control_flow_insn_p (insn)
      rtx insn;
 {
index 3956299e4ea55ab14bb27bae1b9774aa770208dc..d8c058e433081367a80bef268cc8d0c858e483d8 100644 (file)
@@ -1,6 +1,6 @@
 /* Expand the basic unary and binary arithmetic operations, for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2003 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -42,6 +42,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "reload.h"
 #include "ggc.h"
 #include "real.h"
+#include "basic-block.h"
 
 /* Each optab contains info on how this target machine
    can perform a particular operation
@@ -3309,10 +3310,26 @@ emit_libcall_block (insns, target, result, equiv)
   /* Encapsulate the block so it gets manipulated as a unit.  */
   if (!flag_non_call_exceptions || !may_trap_p (equiv))
     {
-      REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last,
-                                            REG_NOTES (first));
-      REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first,
-                                           REG_NOTES (last));
+      /* We can't attach the REG_LIBCALL and REG_RETVAL notes
+        when the encapsulated region would not be in one basic block,
+        i.e. when there is a control_flow_insn_p insn between FIRST and LAST.
+       */
+      bool attach_libcall_retval_notes = true;
+      next = NEXT_INSN (last);
+      for (insn = first; insn != next; insn = NEXT_INSN (insn))
+       if (control_flow_insn_p (insn))
+         {
+           attach_libcall_retval_notes = false;
+           break;
+         }
+
+      if (attach_libcall_retval_notes)
+       {
+         REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last,
+                                                REG_NOTES (first));
+         REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first,
+                                               REG_NOTES (last));
+       }
     }
 }
 \f