aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/basic-block.h7
-rw-r--r--gcc/cfg.c3
3 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 979fb11..12e36f5 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 64dda04..19ed577 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 d195b10..003d09e 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