aboutsummaryrefslogtreecommitdiff
path: root/gcc/ggc.h
diff options
context:
space:
mode:
authorAlex Samuel <samuel@codesourcery.com>1999-12-01 08:13:54 +0000
committerAlex Samuel <samuel@gcc.gnu.org>1999-12-01 08:13:54 +0000
commit52a921766efef3d82ec99d240a8f931ddbb1b20a (patch)
treec96dbba718d499e1c801803080a2d22950da4a59 /gcc/ggc.h
parent777ad4c21f744ae353c2ee440c61ef7600174823 (diff)
downloadgcc-52a921766efef3d82ec99d240a8f931ddbb1b20a.zip
gcc-52a921766efef3d82ec99d240a8f931ddbb1b20a.tar.gz
gcc-52a921766efef3d82ec99d240a8f931ddbb1b20a.tar.bz2
ggc.h (ggc_test_and_set_mark): New macro.
* ggc.h (ggc_test_and_set_mark): New macro. (ggc_mark_rtx): Use ggc_test_and_set_mark. (ggc_mark_tree): Likewise. (ggc_mark_rtvec): Likewise. * ggc-common.c (ggc_mark_rtx_children): Reduce recursion. From-SVN: r30734
Diffstat (limited to 'gcc/ggc.h')
-rw-r--r--gcc/ggc.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/gcc/ggc.h b/gcc/ggc.h
index 3f55a21..809edec 100644
--- a/gcc/ggc.h
+++ b/gcc/ggc.h
@@ -64,25 +64,30 @@ extern void ggc_mark_rtx_children PROTO ((struct rtx_def *));
extern void ggc_mark_rtvec_children PROTO ((struct rtvec_def *));
extern void ggc_mark_tree_children PROTO ((union tree_node *));
-#define ggc_mark_rtx(EXPR) \
- do { \
- rtx r__ = (EXPR); \
- if (r__ != NULL && ! ggc_set_mark (r__)) \
- ggc_mark_rtx_children (r__); \
+/* If EXPR is not NULL and previously unmarked, mark it and evaluate
+ to true. Otherwise evaluate to false. */
+#define ggc_test_and_set_mark(EXPR) \
+ ((EXPR) != NULL && ! ggc_set_mark (EXPR))
+
+#define ggc_mark_rtx(EXPR) \
+ do { \
+ rtx r__ = (EXPR); \
+ if (ggc_test_and_set_mark (r__)) \
+ ggc_mark_rtx_children (r__); \
} while (0)
-#define ggc_mark_tree(EXPR) \
- do { \
- tree t__ = (EXPR); \
- if (t__ != NULL && ! ggc_set_mark (t__)) \
- ggc_mark_tree_children (t__); \
+#define ggc_mark_tree(EXPR) \
+ do { \
+ tree t__ = (EXPR); \
+ if (ggc_test_and_set_mark (t__)) \
+ ggc_mark_tree_children (t__); \
} while (0)
-#define ggc_mark_rtvec(EXPR) \
- do { \
- rtvec v__ = (EXPR); \
- if (v__ != NULL && ! ggc_set_mark (v__)) \
- ggc_mark_rtvec_children (v__); \
+#define ggc_mark_rtvec(EXPR) \
+ do { \
+ rtvec v__ = (EXPR); \
+ if (ggc_test_and_set_mark (v__)) \
+ ggc_mark_rtvec_children (v__); \
} while (0)
#define ggc_mark_string(EXPR) \