tree-sra.c (early_sra): New.
* tree-sra.c (early_sra): New. (decl_can_be_decomposed_p): Deny va_list if early_sra. (tree_sra_early, pass_sra_early): New. * tree-pass.h (pass_sra_early): Declare. * passes.c (init_optimization_passes): Use it. From-SVN: r121953
This commit is contained in:
parent
c4e74b1aaa
commit
029f45bdc1
@ -1,3 +1,11 @@
|
||||
2007-02-14 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* tree-sra.c (early_sra): New.
|
||||
(decl_can_be_decomposed_p): Deny va_list if early_sra.
|
||||
(tree_sra_early, pass_sra_early): New.
|
||||
* tree-pass.h (pass_sra_early): Declare.
|
||||
* passes.c (init_optimization_passes): Use it.
|
||||
|
||||
2007-02-14 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* flags.h (issue_strict_overflow_warning): Convert to a macro.
|
||||
|
@ -489,7 +489,7 @@ init_optimization_passes (void)
|
||||
NEXT_PASS (pass_rename_ssa_copies);
|
||||
NEXT_PASS (pass_ccp);
|
||||
NEXT_PASS (pass_forwprop);
|
||||
NEXT_PASS (pass_sra);
|
||||
NEXT_PASS (pass_sra_early);
|
||||
NEXT_PASS (pass_copy_prop);
|
||||
NEXT_PASS (pass_merge_phi);
|
||||
NEXT_PASS (pass_dce);
|
||||
|
@ -241,6 +241,7 @@ extern struct tree_opt_pass pass_early_tree_profile;
|
||||
extern struct tree_opt_pass pass_cleanup_cfg;
|
||||
extern struct tree_opt_pass pass_referenced_vars;
|
||||
extern struct tree_opt_pass pass_sra;
|
||||
extern struct tree_opt_pass pass_sra_early;
|
||||
extern struct tree_opt_pass pass_tail_recursion;
|
||||
extern struct tree_opt_pass pass_tail_calls;
|
||||
extern struct tree_opt_pass pass_tree_loop;
|
||||
|
@ -75,6 +75,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
*/
|
||||
|
||||
|
||||
/* True if this is the "early" pass, before inlining. */
|
||||
static bool early_sra;
|
||||
|
||||
/* The set of todo flags to return from tree_sra. */
|
||||
static unsigned int todoflags;
|
||||
|
||||
@ -342,6 +345,17 @@ decl_can_be_decomposed_p (tree var)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* HACK: if we decompose a va_list_type_node before inlining, then we'll
|
||||
confuse tree-stdarg.c, and we won't be able to figure out which and
|
||||
how many arguments are accessed. This really should be improved in
|
||||
tree-stdarg.c, as the decomposition is truely a win. This could also
|
||||
be fixed if the stdarg pass ran early, but this can't be done until
|
||||
we've aliasing information early too. See PR 30791. */
|
||||
if (early_sra
|
||||
&& TYPE_MAIN_VARIANT (TREE_TYPE (var))
|
||||
== TYPE_MAIN_VARIANT (va_list_type_node))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2365,12 +2379,44 @@ tree_sra (void)
|
||||
return todoflags;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
tree_sra_early (void)
|
||||
{
|
||||
unsigned int ret;
|
||||
|
||||
early_sra = true;
|
||||
ret = tree_sra ();
|
||||
early_sra = false;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool
|
||||
gate_sra (void)
|
||||
{
|
||||
return flag_tree_sra != 0;
|
||||
}
|
||||
|
||||
struct tree_opt_pass pass_sra_early =
|
||||
{
|
||||
"esra", /* name */
|
||||
gate_sra, /* gate */
|
||||
tree_sra_early, /* execute */
|
||||
NULL, /* sub */
|
||||
NULL, /* next */
|
||||
0, /* static_pass_number */
|
||||
TV_TREE_SRA, /* tv_id */
|
||||
PROP_cfg | PROP_ssa, /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
TODO_dump_func
|
||||
| TODO_update_ssa
|
||||
| TODO_ggc_collect
|
||||
| TODO_verify_ssa, /* todo_flags_finish */
|
||||
0 /* letter */
|
||||
};
|
||||
|
||||
struct tree_opt_pass pass_sra =
|
||||
{
|
||||
"sra", /* name */
|
||||
|
Loading…
x
Reference in New Issue
Block a user