diff options
author | Duncan Sands <baldrick@free.fr> | 2009-12-11 15:38:55 +0100 |
---|---|---|
committer | Duncan Sands <baldrick@gcc.gnu.org> | 2009-12-11 14:38:55 +0000 |
commit | 63a00e0d9139428cec7f5b5471ae036ee3d73db4 (patch) | |
tree | 7e2fd62095299f4918b903dffa1b8bd2df81d455 /gcc | |
parent | 9cf10655bb78b500581f2e3e9bfd0d44cbee7d5c (diff) | |
download | gcc-63a00e0d9139428cec7f5b5471ae036ee3d73db4.zip gcc-63a00e0d9139428cec7f5b5471ae036ee3d73db4.tar.gz gcc-63a00e0d9139428cec7f5b5471ae036ee3d73db4.tar.bz2 |
IPA passes are bigger than other passes...
IPA passes are bigger than other passes, so more memory needs to be allocated
for them (and more copied) in make_pass_instance.
From-SVN: r155161
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/passes.c | 17 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24e65e1..cf0c2e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-12-11 Duncan Sands <baldrick@free.fr> + + * passes.c (make_pass_instance): Allocate and copy the right amount of + memory for ipa passes, which are not the same size as other passes. + 2009-12-11 Joern Rennecke <amylaar@spamcop.net> * plugin.c (get_named_event_id): Fix hash table rebuild to include diff --git a/gcc/passes.c b/gcc/passes.c index 818adde..a373a00 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -460,8 +460,21 @@ make_pass_instance (struct opt_pass *pass, bool track_duplicates) { struct opt_pass *new_pass; - new_pass = XNEW (struct opt_pass); - memcpy (new_pass, pass, sizeof (*new_pass)); + if (pass->type == GIMPLE_PASS + || pass->type == RTL_PASS + || pass->type == SIMPLE_IPA_PASS) + { + new_pass = XNEW (struct opt_pass); + memcpy (new_pass, pass, sizeof (struct opt_pass)); + } + else if (pass->type == IPA_PASS) + { + new_pass = (struct opt_pass *)XNEW (struct ipa_opt_pass_d); + memcpy (new_pass, pass, sizeof (struct ipa_opt_pass_d)); + } + else + gcc_unreachable (); + new_pass->next = NULL; new_pass->todo_flags_start &= ~TODO_mark_first_instance; |