From 63a00e0d9139428cec7f5b5471ae036ee3d73db4 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Fri, 11 Dec 2009 15:38:55 +0100 Subject: 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 --- gcc/passes.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'gcc/passes.c') 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; -- cgit v1.1