+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.
; 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
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
-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
@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.
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.
+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
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
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)
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;
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;