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
This commit is contained in:
Duncan Sands 2009-12-11 15:38:55 +01:00 committed by Duncan Sands
parent 9cf10655bb
commit 63a00e0d91
2 changed files with 20 additions and 2 deletions

View File

@ -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

View File

@ -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;