diff options
author | Alex Samuel <samuel@codesourcery.com> | 1999-12-01 08:13:54 +0000 |
---|---|---|
committer | Alex Samuel <samuel@gcc.gnu.org> | 1999-12-01 08:13:54 +0000 |
commit | 52a921766efef3d82ec99d240a8f931ddbb1b20a (patch) | |
tree | c96dbba718d499e1c801803080a2d22950da4a59 /gcc/ggc.h | |
parent | 777ad4c21f744ae353c2ee440c61ef7600174823 (diff) | |
download | gcc-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.h | 35 |
1 files changed, 20 insertions, 15 deletions
@@ -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) \ |