diff options
author | matz <matz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-19 10:17:33 +0000 |
---|---|---|
committer | matz <matz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-19 10:17:33 +0000 |
commit | e1b3b79beacf0e6747eb7e6a1055d3cd0a436327 (patch) | |
tree | b794f6439d5a67d4ade17d342bf5bd2bff70ce2f /gcc/tree-ssa-structalias.c | |
parent | 0f156b474f341794275de1527abf3434f1e66539 (diff) | |
download | gcc-e1b3b79beacf0e6747eb7e6a1055d3cd0a436327.tar.gz |
* tree-ssa-structalias.c (create_variable_info_for): Also mark
first field in a struct.
(intra_create_variable_infos): Don't deal with flag_argument_noalias.
fortran/
* trans-expr.c (gfc_conv_substring): Don't evaluate casted decl early,
change order of length calculation to (end - start) + 1.
(gfc_get_interface_mapping_array): Adjust call to
gfc_get_nodesc_array_type.
* trans-array.c (gfc_trans_create_temp_array,
gfc_build_constant_array_constructor, gfc_conv_expr_descriptor): Ditto.
* trans-stmt.c (gfc_trans_pointer_assign_need_temp): Ditto.
* trans.c (gfc_add_modify): Assignment between base type and nontarget
type are equal enough.
(gfc_call_malloc): Use prvoid_type_node for return value of
__builtin_malloc.
(gfc_allocate_with_status): Ditto.
* trans-types.c (gfc_array_descriptor_base): Double size of this array.
(gfc_init_types): Build prvoid_type_node.
(gfc_build_array_type): New bool parameter "restricted".
(gfc_get_nodesc_array_type): Ditto, build restrict qualified pointers,
if it's true.
(gfc_get_array_descriptor_base): Ditto.
(gfc_get_array_type_bounds): Ditto.
(gfc_sym_type): Use symbol attributes to feed calls to above functions.
(gfc_get_derived_type): Ditto.
* trans.h (struct lang_type): Add nontarget_type member.
* trans-types.h (prvoid_type_node): Declare.
(gfc_get_array_type_bounds, gfc_get_nodesc_array_type): Declare new
parameter.
* trans-decl.c (gfc_finish_var_decl): Give scalars that can't be
aliased a type with a different alias set than the base type.
(gfc_build_dummy_array_decl): Adjust call to gfc_get_nodesc_array_type.
testsuite/
* gfortran.dg/vect/vect-gems.f90: New test.
* gcc.dg/tree-ssa/alias-1.c: Remove, it checks something broken.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150934 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
-rw-r--r-- | gcc/tree-ssa-structalias.c | 46 |
1 files changed, 9 insertions, 37 deletions
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 50ef0b660f9..72e10835bb5 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4519,6 +4519,13 @@ create_variable_info_for (tree decl, const char *name) vi->size = fo->size; vi->offset = fo->offset; vi->may_have_pointers = fo->may_have_pointers; + if (vi->is_global_var + && (!flag_whole_program || !in_ipa_mode) + && vi->may_have_pointers) + { + if (fo->only_restrict_pointers) + make_constraint_from_restrict (vi, "GLOBAL_RESTRICT"); + } for (i = VEC_length (fieldoff_s, fieldstack) - 1; i >= 1 && VEC_iterate (fieldoff_s, fieldstack, i, fo); i--) @@ -4611,43 +4618,8 @@ intra_create_variable_infos (void) if (!could_have_pointers (t)) continue; - /* If flag_argument_noalias is set, then function pointer - arguments are guaranteed not to point to each other. In that - case, create an artificial variable PARM_NOALIAS and the - constraint ARG = &PARM_NOALIAS. */ - if (POINTER_TYPE_P (TREE_TYPE (t)) && flag_argument_noalias > 0) - { - varinfo_t vi; - var_ann_t ann; - - vi = make_constraint_from_heapvar (get_vi_for_tree (t), - "PARM_NOALIAS"); - ann = get_var_ann (vi->decl); - if (flag_argument_noalias == 1) - { - ann->noalias_state = NO_ALIAS; - make_copy_constraint (vi, nonlocal_id); - } - else if (flag_argument_noalias == 2) - { - ann->noalias_state = NO_ALIAS_GLOBAL; - make_constraint_from (vi, vi->id); - } - else if (flag_argument_noalias == 3) - { - ann->noalias_state = NO_ALIAS_ANYTHING; - make_constraint_from (vi, vi->id); - } - else - gcc_unreachable (); - } - else - { - varinfo_t arg_vi = get_vi_for_tree (t); - - for (p = arg_vi; p; p = p->next) - make_constraint_from (p, nonlocal_id); - } + for (p = get_vi_for_tree (t); p; p = p->next) + make_constraint_from (p, nonlocal_id); if (POINTER_TYPE_P (TREE_TYPE (t)) && TYPE_RESTRICT (TREE_TYPE (t))) make_constraint_from_restrict (get_vi_for_tree (t), "PARM_RESTRICT"); |