options.c (gfc_init_options): Initialize flag_argument_noalias to 3.

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.

From-SVN: r112243
This commit is contained in:
Toon Moene 2006-03-21 07:32:57 +01:00 committed by Toon Moene
parent e67c25c738
commit 0698a1d2bd
7 changed files with 45 additions and 9 deletions

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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;