diff options
author | samuel <samuel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-12-01 08:13:54 +0000 |
---|---|---|
committer | samuel <samuel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-12-01 08:13:54 +0000 |
commit | f7cb0e3920463e689701f00ecc35b366e7d429ec (patch) | |
tree | c96dbba718d499e1c801803080a2d22950da4a59 /gcc/ggc.h | |
parent | 14b40abb6ae68019b5e020f193fd5965701d4b97 (diff) | |
download | gcc-f7cb0e3920463e689701f00ecc35b366e7d429ec.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30734 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ggc.h')
-rw-r--r-- | gcc/ggc.h | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/gcc/ggc.h b/gcc/ggc.h index 3f55a21736b..809edeca1a3 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) \ |