aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Moene <toon@moene.indiv.nluug.nl>2006-03-21 07:32:57 +0100
committerToon Moene <toon@gcc.gnu.org>2006-03-21 06:32:57 +0000
commit0698a1d2bd56fc3b12c1fe235b27030f5d8a54bf (patch)
treeb8851b36230f472b3fa762bc25e4577aed644008
parente67c25c7381536222d154228d16467320ea1fcf8 (diff)
downloadgcc-0698a1d2bd56fc3b12c1fe235b27030f5d8a54bf.zip
gcc-0698a1d2bd56fc3b12c1fe235b27030f5d8a54bf.tar.gz
gcc-0698a1d2bd56fc3b12c1fe235b27030f5d8a54bf.tar.bz2
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/common.opt8
-rw-r--r--gcc/doc/invoke.texi8
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/options.c5
-rw-r--r--gcc/tree-ssa-alias.c13
-rw-r--r--gcc/tree-ssa-structalias.c6
7 files changed, 45 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 20c32c3..d9d4799 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 5b00a7b..f6c7fad 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 5338419..a67d663 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 7256b6e..3cae704 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 ddab37e..438bc48 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 8f8fbfa..7b702f0 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 b5e0830..990398c 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;