From 63270412acc6c694ef18d009623a1210fe31947d Mon Sep 17 00:00:00 2001 From: rguenth Date: Wed, 7 Apr 2010 13:08:24 +0000 Subject: [PATCH 1/1] 2010-04-07 Richard Guenther * doc/invoke.texi (-fargument-alias, -fargument-noalias, -fargument-noalias-global, -fargument-noalias-anything): Remove. * common.opt: Likewise. * tree-ssa-structalias.c (intra_create_variable_infos): Adjust comment. * alias.c (base_alias_check): Remove flag_argument_noalias handling. (nonoverlapping_memrefs_p): Likewise. * emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise. * opts.c (common_handle_option): Handle OPT_fargument_alias, OPT_fargument_noalias, OPT_fargument_noalias_anything and OPT_fargument_noalias_global for backward compatibility. fortran/ * options.c (gfc_init_options): Do not set. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158060 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/alias.c | 42 ++++++++++++++++++++++++++++++++---------- gcc/emit-rtl.c | 18 ------------------ gcc/fortran/ChangeLog | 4 ++++ gcc/fortran/options.c | 3 --- 5 files changed, 51 insertions(+), 31 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff9565711a9..edfd327b437 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,20 @@ 2010-04-07 Richard Guenther + * doc/invoke.texi (-fargument-alias, -fargument-noalias, + -fargument-noalias-global, -fargument-noalias-anything): Remove. + * common.opt: Likewise. + * tree-ssa-structalias.c (intra_create_variable_infos): Adjust + comment. + * alias.c (base_alias_check): Remove flag_argument_noalias + handling. + (nonoverlapping_memrefs_p): Likewise. + * emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise. + * opts.c (common_handle_option): Handle OPT_fargument_alias, + OPT_fargument_noalias, OPT_fargument_noalias_anything and + OPT_fargument_noalias_global for backward compatibility. + +2010-04-07 Richard Guenther + PR tree-optimization/43270 * tree-vrp.c (check_array_ref): Fix flexible array member detection. diff --git a/gcc/alias.c b/gcc/alias.c index a4083a1a13b..1d69d9da603 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2196,21 +2196,43 @@ nonoverlapping_memrefs_p (const_rtx x, const_rtx y) moffsetx = MEM_OFFSET (x); if (TREE_CODE (exprx) == COMPONENT_REF) { - tree t = decl_for_component_ref (exprx); - if (! t) - return 0; - moffsetx = adjust_offset_for_component_ref (exprx, moffsetx); - exprx = t; + if (TREE_CODE (expry) == VAR_DECL + && POINTER_TYPE_P (TREE_TYPE (expry))) + { + tree field = TREE_OPERAND (exprx, 1); + tree fieldcontext = DECL_FIELD_CONTEXT (field); + if (ipa_type_escape_field_does_not_clobber_p (fieldcontext, + TREE_TYPE (field))) + return 1; + } + { + tree t = decl_for_component_ref (exprx); + if (! t) + return 0; + moffsetx = adjust_offset_for_component_ref (exprx, moffsetx); + exprx = t; + } } moffsety = MEM_OFFSET (y); if (TREE_CODE (expry) == COMPONENT_REF) { - tree t = decl_for_component_ref (expry); - if (! t) - return 0; - moffsety = adjust_offset_for_component_ref (expry, moffsety); - expry = t; + if (TREE_CODE (exprx) == VAR_DECL + && POINTER_TYPE_P (TREE_TYPE (exprx))) + { + tree field = TREE_OPERAND (expry, 1); + tree fieldcontext = DECL_FIELD_CONTEXT (field); + if (ipa_type_escape_field_does_not_clobber_p (fieldcontext, + TREE_TYPE (field))) + return 1; + } + { + tree t = decl_for_component_ref (expry); + if (! t) + return 0; + moffsety = adjust_offset_for_component_ref (expry, moffsety); + expry = t; + } } if (! DECL_P (exprx) || ! DECL_P (expry)) diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index b5c41853250..e0acc0c2766 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1782,15 +1782,6 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, the size we got from the type? */ } - else if (flag_argument_noalias > 1 - && (INDIRECT_REF_P (t2)) - && TREE_CODE (TREE_OPERAND (t2, 0)) == PARM_DECL) - { - expr = t; - offset = const0_rtx; - apply_bitpos = bitpos; - } - /* If this is an indirect reference, record it. */ else if (TREE_CODE (t) == INDIRECT_REF || TREE_CODE (t) == MISALIGNED_INDIRECT_REF) @@ -1810,15 +1801,6 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, apply_bitpos = bitpos; } - /* If this is an indirect reference, record it. */ - else if (TREE_CODE (t) == INDIRECT_REF - || TREE_CODE (t) == MISALIGNED_INDIRECT_REF) - { - expr = t; - offset = const0_rtx; - apply_bitpos = bitpos; - } - if (!align_computed && !INDIRECT_REF_P (t)) { unsigned int obj_align diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9725d8e2f1d..2b1aa30b407 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2010-04-07 Richard Guenther + + * options.c (gfc_init_options): Do not set. + 2010-04-06 Tobias Burnus PR fortran/18918 diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index a91ba9329f3..6a5a3db6f3b 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -132,9 +132,6 @@ gfc_init_options (unsigned int argc, const char **argv) gfc_option.rtcheck = 0; gfc_option.coarray = GFC_FCOARRAY_NONE; - /* Argument pointers cannot point to anything but their argument. */ - flag_argument_noalias = 3; - flag_errno_math = 0; set_default_std_flags (); -- 2.11.0