* tree-ssa-alias.c (create_structure_vars): When in SSA, update operand
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Dec 2006 12:02:09 +0000 (12:02 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Dec 2006 12:02:09 +0000 (12:02 +0000)
caches.
* tree-ssa-operands.c (build_ssa_operands): Recompute addresses_taken
bitmap.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120284 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-alias.c
gcc/tree-ssa-operands.c

index 4c52d7f..93be53d 100644 (file)
@@ -1,4 +1,11 @@
 2006-12-30  Jan Hubicka  <jh@suse.cz>
+
+       * tree-ssa-alias.c (create_structure_vars): When in SSA, update operand
+       caches.
+       * tree-ssa-operands.c (build_ssa_operands): Recompute addresses_taken
+       bitmap.
+
+2006-12-30  Jan Hubicka  <jh@suse.cz>
            Vladimir Yanovsky <volodyan@gmail.com>
        
        * emit-rt.c (emit_copy_of_insn_after): Fix bug causing exponential
index 939ac0f..2ef5297 100644 (file)
@@ -3188,6 +3188,58 @@ create_structure_vars (void)
     }
   htab_delete (used_portions);
   VEC_free (tree, heap, varvec);
+
+  /* Update SSA operands of statememnts mentioning varibales we split.  */
+  if (gimple_in_ssa_p (cfun))
+    FOR_EACH_BB (bb)
+      {
+       block_stmt_iterator bsi;
+       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
+         {
+           tree stmt = bsi_stmt (bsi);
+           bool update = false;
+           unsigned int i;
+           bitmap_iterator bi;
+
+           if (STORED_SYMS (stmt))
+              EXECUTE_IF_SET_IN_BITMAP (STORED_SYMS (stmt), 0, i, bi)
+               {
+                 tree sym = referenced_var_lookup (i);
+                 if (get_subvars_for_var (sym))
+                   {
+                     update=true;
+                     break;
+                   }
+               }
+
+           if (LOADED_SYMS (stmt) && !update)
+              EXECUTE_IF_SET_IN_BITMAP (LOADED_SYMS (stmt), 0, i, bi)
+               {
+                 tree sym = referenced_var_lookup (i);
+                 if (get_subvars_for_var (sym))
+                   {
+                     update=true;
+                     break;
+                   }
+               }
+
+           if (stmt_ann (stmt)->addresses_taken && !update)
+              EXECUTE_IF_SET_IN_BITMAP (stmt_ann (stmt)->addresses_taken,
+                                        0, i, bi)
+               {
+                 tree sym = referenced_var_lookup (i);
+                 if (get_subvars_for_var (sym))
+                   {
+                     update=true;
+                     break;
+                   }
+               }
+
+           if (update)
+             update_stmt (stmt);
+         }
+      }
+  
   return 0;
 }
 
index d47d19c..9d4b84c 100644 (file)
@@ -2337,6 +2337,9 @@ build_ssa_operands (tree stmt)
      makes no memory references.  */
   ann->has_volatile_ops = false;
   ann->references_memory = false;
+  /* Just clear the bitmap so we don't end up reallocating it over and over.  */
+  if (ann->addresses_taken)
+    bitmap_clear (ann->addresses_taken);
 
   start_ssa_stmt_operands ();
   parse_ssa_operands (stmt);
@@ -2344,6 +2347,8 @@ build_ssa_operands (tree stmt)
   operand_build_sort_virtual (build_vdefs);
   finalize_ssa_stmt_operands (stmt);
 
+  if (ann->addresses_taken && bitmap_empty_p (ann->addresses_taken))
+    ann->addresses_taken = NULL;
   /* For added safety, assume that statements with volatile operands
      also reference memory.  */
   if (ann->has_volatile_ops)