diff options
author | Brian Booth <bbooth@redhat.com> | 2004-07-27 18:32:50 +0000 |
---|---|---|
committer | Brian Booth <bbooth@gcc.gnu.org> | 2004-07-27 18:32:50 +0000 |
commit | b3fade83995e0584a520c43c423fe866bcea8908 (patch) | |
tree | 8ef09fae76670cdbb4009e3f7685931d33dd0c19 /gcc | |
parent | 62d591893b22a727b229a2984453da12198b69e4 (diff) | |
download | gcc-b3fade83995e0584a520c43c423fe866bcea8908.zip gcc-b3fade83995e0584a520c43c423fe866bcea8908.tar.gz gcc-b3fade83995e0584a520c43c423fe866bcea8908.tar.bz2 |
tree-optimize.c (register_one_dump_file): Update condition that uses static_pass_number.
* tree-optimize.c (register_one_dump_file): Update condition that uses
static_pass_number.
(dup_pass_1): Replace with...
(next_pass_1): This.
(NEXT_PASS): Call next_pass_1.
(DUP_PASS): Remove.
(init_tree_optimization_passes): Remove uses of DUP_PASS.
(execute_one_pass): Update condition that uses
static_pass_number.
* tree-pass.h (tree_opt_pass): Declare static_pass_number as a signed
integer.
From-SVN: r85226
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/tree-optimize.c | 92 | ||||
-rw-r--r-- | gcc/tree-pass.h | 2 |
3 files changed, 64 insertions, 44 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 504a2da..d64b7ea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2004-07-27 Brian Booth <bbooth@redhat.com> + + * tree-optimize.c (register_one_dump_file): Update condition that uses + static_pass_number. + (dup_pass_1): Replace with... + (next_pass_1): This. + (NEXT_PASS): Call next_pass_1. + (DUP_PASS): Remove. + (init_tree_optimization_passes): Remove uses of DUP_PASS. + (execute_one_pass): Update condition that uses + static_pass_number. + * tree-pass.h (tree_opt_pass): Declare static_pass_number as a signed + integer. + 2004-07-27 Nick Clifton <nickc@redhat.com> * config/m32r/m32r.c: Include integrate.h in order to get the diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index f2d98af..7cdb30b 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -213,9 +213,9 @@ register_one_dump_file (struct tree_opt_pass *pass) if (!pass->name) return; - /* See below in dup_pass_1. */ + /* See below in next_pass_1. */ num[0] = '\0'; - if (pass->static_pass_number) + if (pass->static_pass_number != -1) sprintf (num, "%d", ((int) pass->static_pass_number < 0 ? 1 : pass->static_pass_number)); @@ -252,34 +252,42 @@ register_dump_files (struct tree_opt_pass *pass, int properties) return properties; } -/* Duplicate a pass that's to be run more than once. */ +/* Add a pass to the pass list. Duplicate the pass if it's already + in the list. */ -static struct tree_opt_pass * -dup_pass_1 (struct tree_opt_pass *pass) +static struct tree_opt_pass ** +next_pass_1 (struct tree_opt_pass **list, struct tree_opt_pass *pass) { - struct tree_opt_pass *new; - - new = xmalloc (sizeof (*new)); - memcpy (new, pass, sizeof (*new)); - /* Indicate to register_dump_files that this pass has duplicates, - and so it should rename the dump file. The first instance will - be < 0, and be number of duplicates = -static_pass_number + 1. - Subsequent instances will be > 0 and just the duplicate number. */ - if (pass->name) + /* A non-zero static_pass_number indicates that the + pass is already in the list. */ + if (pass->static_pass_number) { - int n, p = pass->static_pass_number; - - if (p) - n = -(--p) + 1; - else - n = 2, p = -1; - - pass->static_pass_number = p; - new->static_pass_number = n; + struct tree_opt_pass *new; + + new = xmalloc (sizeof (*new)); + memcpy (new, pass, sizeof (*new)); + + /* Indicate to register_dump_files that this pass has duplicates, + and so it should rename the dump file. The first instance will + be -1, and be number of duplicates = -static_pass_number - 1. + Subsequent instances will be > 0 and just the duplicate number. */ + if (pass->name) + { + pass->static_pass_number -= 1; + new->static_pass_number = -pass->static_pass_number; + } + + *list = new; } - - return new; + else + { + pass->static_pass_number = -1; + *list = pass; + } + + return &(*list)->next; + } /* Construct the pass tree. */ @@ -289,8 +297,7 @@ init_tree_optimization_passes (void) { struct tree_opt_pass **p; -#define NEXT_PASS(PASS) (*p = &PASS, p = &(*p)->next) -#define DUP_PASS(PASS) (*dup_pass_1 (&PASS)) +#define NEXT_PASS(PASS) (p = next_pass_1 (p, &PASS)) p = &all_passes; NEXT_PASS (pass_gimple); @@ -319,7 +326,7 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_dce); NEXT_PASS (pass_dominator); NEXT_PASS (pass_redundant_phi); - NEXT_PASS (DUP_PASS (pass_dce)); + NEXT_PASS (pass_dce); NEXT_PASS (pass_forwprop); NEXT_PASS (pass_phiopt); NEXT_PASS (pass_may_alias); @@ -327,26 +334,26 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_ch); NEXT_PASS (pass_profile); NEXT_PASS (pass_sra); - NEXT_PASS (DUP_PASS (pass_rename_ssa_copies)); - NEXT_PASS (DUP_PASS (pass_dominator)); - NEXT_PASS (DUP_PASS (pass_redundant_phi)); - NEXT_PASS (DUP_PASS (pass_dce)); + NEXT_PASS (pass_rename_ssa_copies); + NEXT_PASS (pass_dominator); + NEXT_PASS (pass_redundant_phi); + NEXT_PASS (pass_dce); NEXT_PASS (pass_dse); - NEXT_PASS (DUP_PASS (pass_may_alias)); - NEXT_PASS (DUP_PASS (pass_forwprop)); - NEXT_PASS (DUP_PASS (pass_phiopt)); + NEXT_PASS (pass_may_alias); + NEXT_PASS (pass_forwprop); + NEXT_PASS (pass_phiopt); NEXT_PASS (pass_ccp); - NEXT_PASS (DUP_PASS (pass_redundant_phi)); + NEXT_PASS (pass_redundant_phi); NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_split_crit_edges); NEXT_PASS (pass_pre); NEXT_PASS (pass_loop); - NEXT_PASS (DUP_PASS (pass_dominator)); - NEXT_PASS (DUP_PASS (pass_redundant_phi)); + NEXT_PASS (pass_dominator); + NEXT_PASS (pass_redundant_phi); NEXT_PASS (pass_cd_dce); - NEXT_PASS (DUP_PASS (pass_dse)); - NEXT_PASS (DUP_PASS (pass_forwprop)); - NEXT_PASS (DUP_PASS (pass_phiopt)); + NEXT_PASS (pass_dse); + NEXT_PASS (pass_forwprop); + NEXT_PASS (pass_phiopt); NEXT_PASS (pass_tail_calls); NEXT_PASS (pass_late_warn_uninitialized); NEXT_PASS (pass_del_pta); @@ -363,7 +370,6 @@ init_tree_optimization_passes (void) *p = NULL; #undef NEXT_PASS -#undef DUP_PASS /* Register the passes with the tree dump code. */ register_dump_files (all_passes, 0); @@ -424,7 +430,7 @@ execute_one_pass (struct tree_opt_pass *pass) execute_todo (todo); /* If a dump file name is present, open it if enabled. */ - if (pass->static_pass_number) + if (pass->static_pass_number != -1) { dump_file = dump_begin (pass->static_pass_number, &dump_flags); if (dump_file) diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 1edff2d..9651c9e 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -50,7 +50,7 @@ struct tree_opt_pass struct tree_opt_pass *next; /* Static pass number, used as a fragment of the dump file name. */ - unsigned int static_pass_number; + int static_pass_number; /* The timevar id associated with this pass. */ /* ??? Ideally would be dynamically assigned. */ |