OSDN Git Service

* basic-block.h (BB_SET_PARTITION): Clear old value first.
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Aug 2004 07:25:06 +0000 (07:25 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Aug 2004 07:25:06 +0000 (07:25 +0000)
* cfg.c (clear_bb_flags): Don't clear partition setting.

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

gcc/ChangeLog
gcc/basic-block.h
gcc/cfg.c

index 979fb11..12e36f5 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-25  Zack Weinberg  <zack@codesourcery.com>
+
+       * basic-block.h (BB_SET_PARTITION): Clear old value first.
+       * cfg.c (clear_bb_flags): Don't clear partition setting.
+
 2004-08-25  Alan Modra  <amodra@bigpond.net.au>
 
        PR target/17052
index 64dda04..19ed577 100644 (file)
@@ -318,7 +318,12 @@ typedef struct reorder_block_def
 /* Partitions, to be used when partitioning hot and cold basic blocks into
    separate sections.  */
 #define BB_PARTITION(bb) ((bb)->flags & (BB_HOT_PARTITION|BB_COLD_PARTITION))
-#define BB_SET_PARTITION(bb, part) ((bb)->flags |= (part))
+#define BB_SET_PARTITION(bb, part) do {                                        \
+  basic_block bb_ = (bb);                                              \
+  bb_->flags = ((bb_->flags & ~(BB_HOT_PARTITION|BB_COLD_PARTITION))   \
+               | (part));                                              \
+} while (0)
+
 #define BB_COPY_PARTITION(dstbb, srcbb) \
   BB_SET_PARTITION (dstbb, BB_PARTITION (srcbb))
 
index d195b10..003d09e 100644 (file)
--- a/gcc/cfg.c
+++ b/gcc/cfg.c
@@ -462,13 +462,14 @@ redirect_edge_pred (edge e, basic_block new_pred)
   e->src = new_pred;
 }
 
+/* Clear all basic block flags, with the exception of partitioning.  */
 void
 clear_bb_flags (void)
 {
   basic_block bb;
 
   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
-    bb->flags = 0;
+    bb->flags = BB_PARTITION (bb);
 }
 \f
 /* Check the consistency of profile information.  We can't do that