OSDN Git Service

* tree-ssa-loop-ivopts.c: New file.
[pf3gnuchains/gcc-fork.git] / gcc / tree-alias-common.c
index 561feb5..eac7746 100644 (file)
@@ -154,11 +154,7 @@ get_alias_var_decl (tree decl)
       newvar = create_alias_var (decl);
       /* Assign globals to global var for purposes of intraprocedural
         analysis.  */
-      if ((DECL_CONTEXT (decl) == NULL 
-          || TREE_PUBLIC (decl)
-          || TREE_STATIC (decl)
-          || decl_function_context (decl) == NULL) 
-         && decl != pta_global_var)
+      if (TREE_STATIC (decl) && decl != pta_global_var)
        {
          current_alias_ops->addr_assign (current_alias_ops, 
                                          get_alias_var (pta_global_var), 
@@ -448,7 +444,10 @@ find_func_aliases (tree stp)
        {
          op0 = TREE_OPERAND (stp, 0);
          op1 = TREE_OPERAND (stp, 1);
+         if (TREE_CODE (op1) == WITH_SIZE_EXPR)
+           op1 = TREE_OPERAND (op1, 0);
        }
+
       /* lhsAV should always have an alias variable */
       lhsAV = get_alias_var (op0);
       if (!lhsAV)
@@ -533,7 +532,7 @@ find_func_aliases (tree stp)
          else if (TREE_CODE (op1) == CALL_EXPR)
            {
              /* Heap assignment. These are __attribute__ malloc or
-                something, i'll deal with it later.  */
+                something, I'll deal with it later.  */
              if (0)
                {}
              else
@@ -1013,7 +1012,7 @@ create_alias_vars (void)
        {
          var = TREE_VALUE (vars);
          if (TREE_CODE (var) != LABEL_DECL
-             && decl_function_context (var) == NULL
+             && TREE_STATIC (var)
              && DECL_INITIAL (var))
            find_func_aliases (var);
        }
@@ -1030,10 +1029,20 @@ create_alias_vars (void)
   pta_global_var = NULL_TREE;
 }
 
+static bool
+gate_pta (void)
+{
+#ifdef HAVE_BANSHEE
+  return flag_tree_points_to != PTA_NONE;
+#else
+  return false;
+#endif
+}
+
 struct tree_opt_pass pass_build_pta = 
 {
   "pta",                               /* name */
-  NULL,                                        /* gate */
+  gate_pta,                            /* gate */
   create_alias_vars,                   /* execute */
   NULL,                                        /* sub */
   NULL,                                        /* next */
@@ -1054,9 +1063,6 @@ delete_alias_vars (void)
 {
   size_t i;
 
-  if (flag_tree_points_to != PTA_ANDERSEN)
-    return;
-
   for (i = 0; i < VARRAY_ACTIVE_SIZE (local_alias_vars); i++)
     {
       tree key = VARRAY_TREE (local_alias_vars, i);
@@ -1081,7 +1087,7 @@ delete_alias_vars (void)
 struct tree_opt_pass pass_del_pta = 
 {
   "pta",                               /* name */
-  NULL,                                        /* gate */
+  gate_pta,                            /* gate */
   delete_alias_vars,                   /* execute */
   NULL,                                        /* sub */
   NULL,                                        /* next */