From 51a904c9e6cbce9225c8b584eff328e71afb049b Mon Sep 17 00:00:00 2001
From: Zack Weinberg <zack@codesourcery.com>
Date: Wed, 25 Aug 2004 07:25:06 +0000
Subject: [PATCH] basic-block.h (BB_SET_PARTITION): Clear old value first.

	* basic-block.h (BB_SET_PARTITION): Clear old value first.
	* cfg.c (clear_bb_flags): Don't clear partition setting.

From-SVN: r86537
---
 gcc/ChangeLog     | 5 +++++
 gcc/basic-block.h | 7 ++++++-
 gcc/cfg.c         | 3 ++-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 979fb11a284d..12e36f5b3705 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 64dda0404434..19ed577fe553 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -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))
 
diff --git a/gcc/cfg.c b/gcc/cfg.c
index d195b10cd4ea..003d09e05ff2 100644
--- 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);
 }
 
 /* Check the consistency of profile information.  We can't do that
-- 
GitLab