diff options
author | toon <toon@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-21 06:32:57 +0000 |
---|---|---|
committer | toon <toon@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-21 06:32:57 +0000 |
commit | 5ff22aea8fd9b39bfa3329bae1e78326c098d716 (patch) | |
tree | b8851b36230f472b3fa762bc25e4577aed644008 /gcc | |
parent | d1d2af7d413943e01d6a8216c9564d6651ca4474 (diff) | |
download | gcc-5ff22aea8fd9b39bfa3329bae1e78326c098d716.tar.gz |
2006-03-21 Toon Moene <toon@moene.indiv.nluug.nl>
* fortran/options.c (gfc_init_options): Initialize
flag_argument_noalias to 3.
* doc/invoke.texi: Document new flag -fargument-noalias-anything.
* tree-ssa-alias.c (may_alias_p): If flag_argument_noalias > 2,
argument pointers may not alias any other storage.
* common.opt: Define option -fargument-noalias-anything.
* tree-ssa-structalias.c (intra_create_variable_infos): Fortran
alias semantics is specified by flag_argument_noalias > 2.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112243 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/common.opt | 8 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 8 | ||||
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/options.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 13 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 6 |
7 files changed, 45 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20c32c30cc9..d9d4799e839 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2006-03-21 Toon Moene <toon@moene.indiv.nluug.nl> + + * doc/invoke.texi: Document new flag -fargument-noalias-anything. + * tree-ssa-alias.c (may_alias_p): If flag_argument_noalias > 2, + argument pointers may not alias any other storage. + * common.opt: Define option -fargument-noalias-anything. + * tree-ssa-structalias.c (intra_create_variable_infos): Fortran + alias semantics is specified by flag_argument_noalias > 2. + 2006-03-20 Jeff Law <law@redhat.com> * tree-pass.h (pass_phi_only_copy_prop): Delete. diff --git a/gcc/common.opt b/gcc/common.opt index 5b00a7bd0f9..f6c7fadffc3 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -257,7 +257,9 @@ Common RejectNegative Joined UInteger ; 1 if pointer arguments may not alias each other but may alias ; global variables. ; 2 if pointer arguments may not alias each other and may not -; alias global variables. True in Fortran. +; alias global variables. +; 3 if pointer arguments may not alias anything. True in Fortran. +; Set by the front end. fargument-alias Common Report Var(flag_argument_noalias,0) Specify that arguments may alias each other and globals @@ -270,6 +272,10 @@ fargument-noalias-global Common Report Var(flag_argument_noalias,2) VarExists Assume arguments alias neither each other nor globals +fargument-noalias-anything +Common Report Var(flag_argument_noalias,3) VarExists +Assume arguments alias no other storage + fasynchronous-unwind-tables Common Report Var(flag_asynchronous_unwind_tables) Generate unwind tables that are exact at each instruction boundary diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 533841931b7..a67d6637c49 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -773,8 +773,8 @@ See S/390 and zSeries Options. -fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol -fargument-alias -fargument-noalias @gol --fargument-noalias-global -fleading-underscore @gol --ftls-model=@var{model} @gol +-fargument-noalias-global -fargument-noalias-anything +-fleading-underscore -ftls-model=@var{model} @gol -ftrapv -fwrapv -fbounds-check @gol -fvisibility -fopenmp} @end table @@ -13332,9 +13332,11 @@ of 128KB@. Note that this may only work with the GNU linker. @item -fargument-alias @itemx -fargument-noalias @itemx -fargument-noalias-global +@itemx -fargument-noalias-anything @opindex fargument-alias @opindex fargument-noalias @opindex fargument-noalias-global +@opindex fargument-noalias-anything Specify the possible relationships among parameters and between parameters and global data. @@ -13344,6 +13346,8 @@ alias each other and may alias global storage.@* each other, but may alias global storage.@* @option{-fargument-noalias-global} specifies that arguments do not alias each other and do not alias global storage. +@option{-fargument-noalias-anything} specifies that arguments do not +alias any other storage. Each language will automatically use whatever option is required by the language standard. You should not need to use these options yourself. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7256b6eb267..3cae704abef 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2006-03-21 Toon Moene <toon@moene.indiv.nluug.nl> + + * options.c (gfc_init_options): Initialize + flag_argument_noalias to 3. + 2006-03-20 Thomas Koenig <Thomas.Koenig@online.de> PR fortran/20935 diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index ddab37ed3ad..438bc48ad55 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -85,7 +85,10 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED, gfc_option.fpe = 0; - flag_argument_noalias = 2; + /* Argument pointers cannot point to anything + but their argument. */ + flag_argument_noalias = 3; + flag_errno_math = 0; gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 8f8fbfa04b9..7b702f00765 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -1804,8 +1804,17 @@ may_alias_p (tree ptr, HOST_WIDE_INT mem_alias_set, alias_stats.simple_resolved++; return false; } - - /* If -fargument-noalias-global is >1, pointer arguments may + + /* If -fargument-noalias-global is > 2, pointer arguments may + not point to anything else. */ + if (flag_argument_noalias > 2 && TREE_CODE (ptr) == PARM_DECL) + { + alias_stats.alias_noalias++; + alias_stats.simple_resolved++; + return false; + } + + /* If -fargument-noalias-global is > 1, pointer arguments may not point to global variables. */ if (flag_argument_noalias > 1 && is_global_var (var) && TREE_CODE (ptr) == PARM_DECL) diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index b5e08309dfe..990398c1803 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4041,7 +4041,7 @@ intra_create_variable_infos (void) tree t; /* For each incoming argument arg, ARG = &ANYTHING or a dummy variable if - flag_argument_noalias > 1. */ + flag_argument_noalias > 2. */ for (t = DECL_ARGUMENTS (current_function_decl); t; t = TREE_CHAIN (t)) { struct constraint_expr lhs; @@ -4051,11 +4051,11 @@ intra_create_variable_infos (void) lhs.type = SCALAR; lhs.var = create_variable_info_for (t, alias_get_name (t)); - /* With flag_argument_noalias greater than one means that the incoming + /* With flag_argument_noalias greater than two means that the incoming argument cannot alias anything except for itself so create a HEAP variable. */ if (POINTER_TYPE_P (TREE_TYPE (t)) - && flag_argument_noalias > 1) + && flag_argument_noalias > 2) { varinfo_t vi; struct constraint_expr rhs; |