OSDN Git Service

2006-03-21 Toon Moene <toon@moene.indiv.nluug.nl>
authortoon <toon@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Mar 2006 06:32:57 +0000 (06:32 +0000)
committertoon <toon@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Mar 2006 06:32:57 +0000 (06:32 +0000)
* 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

gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/fortran/ChangeLog
gcc/fortran/options.c
gcc/tree-ssa-alias.c
gcc/tree-ssa-structalias.c

index 20c32c3..d9d4799 100644 (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.
index 5b00a7b..f6c7fad 100644 (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
index 5338419..a67d663 100644 (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.
index 7256b6e..3cae704 100644 (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
index ddab37e..438bc48 100644 (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
index 8f8fbfa..7b702f0 100644 (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)
index b5e0830..990398c 100644 (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;