diff --git a/gcc/passes.c b/gcc/passes.c
index 05288b6a149521db13de6a7c6f89a908ec01cd3a..13b3b33e972fdbefd0ef54a80edc53c7d9bbeaac 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -721,24 +721,14 @@ execute_todo (unsigned int flags)
   if (!flags)
     return;
   
-  /* Always recalculate SMT usage before doing anything else.  */
-  if (flags & TODO_update_smt_usage)
-    recalculate_used_alone ();
-
   /* Always cleanup the CFG before trying to update SSA .  */
   if (flags & TODO_cleanup_cfg)
     {
-      /* CFG Cleanup can cause a constant to prop into an ARRAY_REF.  */
-      updating_used_alone = true;
-
       if (current_loops)
 	cleanup_tree_cfg_loop ();
       else
 	cleanup_tree_cfg ();
 
-      /* Update the used alone after cleanup cfg.  */
-      recalculate_used_alone ();
-
       /* When cleanup_tree_cfg merges consecutive blocks, it may
 	 perform some simplistic propagation when removing single
 	 valued PHI nodes.  This propagation may, in turn, cause the
@@ -835,9 +825,6 @@ execute_one_pass (struct tree_opt_pass *pass)
   gcc_assert ((curr_properties & pass->properties_required)
 	      == pass->properties_required);
 
-  if (pass->properties_destroyed & PROP_smt_usage)
-    updating_used_alone = true;
-
   /* If a dump file name is present, open it if enabled.  */
   if (pass->static_pass_number != -1)
     {
@@ -904,9 +891,6 @@ execute_one_pass (struct tree_opt_pass *pass)
       dump_file = NULL;
     }
 
-  if (pass->properties_destroyed & PROP_smt_usage)
-    updating_used_alone = false;
-
   return true;
 }
 
diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c
index 38b2101d33c281990534d474fa2c90e63ff50451..c3f4e0453ad96ce1a466161a5b042c9b08fe6aa3 100644
--- a/gcc/tree-complex.c
+++ b/gcc/tree-complex.c
@@ -1540,7 +1540,7 @@ struct tree_opt_pass pass_lower_complex =
   0,					/* tv_id */
   PROP_ssa,				/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,                       /* properties_destroyed */
+  0,                       		/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_dump_func | TODO_ggc_collect
   | TODO_update_smt_usage
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index bee5cd94794ca02af691725e834f213fcaf64a28..b3aa655f556e23313c0ff14baefcc0ed69ce1e05 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -1060,9 +1060,6 @@ void delete_alias_heapvars (void);
 
 void swap_tree_operands (tree, tree *, tree *);
 
-extern void recalculate_used_alone (void);
-extern bool updating_used_alone;
-
 int least_common_multiple (int, int);
 
 #endif /* _TREE_FLOW_H  */
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index d6838d2081fe7eaa12e31f2f600d0c538ccc2363..04db3bbc6d42e390f0cb466d5063701bcddcc78a 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -151,8 +151,6 @@ struct dump_file_info
 #define PROP_rtl		(1 << 8)
 #define PROP_alias		(1 << 9)
 #define PROP_gimple_lomp	(1 << 10)	/* lowered OpenMP directives */
-#define PROP_smt_usage          (1 << 11)       /* which SMT's are
-						   used alone.  */
 
 #define PROP_trees \
   (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 2db1925013ce7ae7220b1afcdce1e43a6d4bdd48..ab4534186dd8e83418c32af61624d65058b62ec7 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -2356,7 +2356,7 @@ struct tree_opt_pass pass_sra =
   TV_TREE_SRA,				/* tv_id */
   PROP_cfg | PROP_ssa | PROP_alias,	/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,		        /* properties_destroyed */
+  0,				        /* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_dump_func /* todo_flags_finish */
   | TODO_update_ssa
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 6853ea14712c115568e04fc94d9a2a298331f4a7..b39553ea832f4da9f43f0441f0979870b6df0aac 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -370,12 +370,6 @@ set_initial_properties (struct alias_info *ai)
     }
 }
 
-
-/* This variable is set to true if we are updating the used alone
-   information for SMTs, or are in a pass that is going to break it
-   temporarily.  */
-bool updating_used_alone;
-
 /* Compute which variables need to be marked call clobbered because
    their tag is call clobbered, and which tags need to be marked
    global because they contain global variables.  */
@@ -401,120 +395,6 @@ compute_call_clobbered (struct alias_info *ai)
   compute_tag_properties ();
 }
 
-
-/* Helper for recalculate_used_alone.  Return a conservatively correct
-   answer as to whether STMT may make a store on the LHS to SYM.  */
-
-static bool
-lhs_may_store_to (tree stmt, tree sym ATTRIBUTE_UNUSED)
-{
-  tree lhs = GENERIC_TREE_OPERAND (stmt, 0);
-  
-  lhs = get_base_address (lhs);
-  
-  if (!lhs)
-    return false;
-
-  if (TREE_CODE (lhs) == SSA_NAME)
-    return false;
-  /* We could do better here by looking at the type tag of LHS, but it
-     is unclear whether this is worth it. */
-  return true;
-}
-
-/* Recalculate the used_alone information for SMTs . */
-
-void 
-recalculate_used_alone (void)
-{
-  VEC (tree, heap) *calls = NULL;
-  block_stmt_iterator bsi;
-  basic_block bb;
-  tree stmt;
-  size_t i;
-  referenced_var_iterator rvi;
-  tree var;
-  
-  /* First, reset all the SMT used alone bits to zero.  */
-  updating_used_alone = true;
-  FOR_EACH_REFERENCED_VAR (var, rvi)
-    if (TREE_CODE (var) == SYMBOL_MEMORY_TAG)
-      {
-	SMT_OLD_USED_ALONE (var) = SMT_USED_ALONE (var);
-	SMT_USED_ALONE (var) = 0;
-      }
-
-  /* Walk all the statements.
-     Calls get put into a list of statements to update, since we will
-     need to update operands on them if we make any changes.
-     If we see a bare use of a SMT anywhere in a real virtual use or virtual
-     def, mark the SMT as used alone, and for renaming.  */
-  FOR_EACH_BB (bb)
-    {
-      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
-	{
-	  bool iscall = false;
-	  ssa_op_iter iter;
-
-	  stmt = bsi_stmt (bsi);
-	  
-	  if (TREE_CODE (stmt) == CALL_EXPR
-	      || (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT 
-		  && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 1)) == CALL_EXPR))
-	    {
-	      iscall = true;
-	      VEC_safe_push (tree, heap, calls, stmt);	    
-	    }
-	  
-	  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, 
-				     SSA_OP_VUSE | SSA_OP_VIRTUAL_DEFS)
-	    {
-	      tree svar = var;
-	      
-	      if (TREE_CODE (var) == SSA_NAME)
-		svar = SSA_NAME_VAR (var);
-	      
-	      if (TREE_CODE (svar) == SYMBOL_MEMORY_TAG)
-		{
-		  /* We only care about the LHS on calls.  */
-		  if (iscall && !lhs_may_store_to (stmt, svar))
-		    continue;
-
-		  if (!SMT_USED_ALONE (svar))
-		    {
-		      SMT_USED_ALONE (svar) = true;
-		      
-		      /* Only need to mark for renaming if it wasn't
-			 used alone before.  */
-		      if (!SMT_OLD_USED_ALONE (svar))
-			mark_sym_for_renaming (svar);
-		    }
-		}
-	    }
-	}	           
-    }
-  
-  /* Update the operands on all the calls we saw.  */
-  if (calls)
-    {
-      for (i = 0; VEC_iterate (tree, calls, i, stmt); i++)
-	update_stmt (stmt);
-    }
-  
-  /* We need to mark SMT's that are no longer used for renaming so the
-     symbols go away, or else verification will be angry with us, even
-     though they are dead.  */
-  FOR_EACH_REFERENCED_VAR (var, rvi)
-    if (TREE_CODE (var) == SYMBOL_MEMORY_TAG)
-      {
-	if (SMT_OLD_USED_ALONE (var) && !SMT_USED_ALONE (var))
-	  mark_sym_for_renaming (var);
-      }
-
-  VEC_free (tree, heap, calls);
-  updating_used_alone = false;
-}
-
 /* Compute may-alias information for every variable referenced in function
    FNDECL.
 
@@ -687,7 +567,6 @@ compute_may_aliases (void)
   /* Deallocate memory used by aliasing data structures.  */
   delete_alias_info (ai);
 
-  updating_used_alone = true;
   {
     block_stmt_iterator bsi;
     basic_block bb;
@@ -699,8 +578,6 @@ compute_may_aliases (void)
           }
       }
   }
-  recalculate_used_alone ();
-  updating_used_alone = false;
   return 0;
 }
 
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index c8ec228e244c1b859dcdd2366a963f32c01cafde..1dced722942217e147da87aed7934a920dd06ce9 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1434,7 +1434,7 @@ struct tree_opt_pass pass_ccp =
   TV_TREE_CCP,				/* tv_id */
   PROP_cfg | PROP_ssa | PROP_alias,	/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,			/* properties_destroyed */
+  0,					/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_cleanup_cfg | TODO_dump_func | TODO_update_ssa
     | TODO_ggc_collect | TODO_verify_ssa
@@ -1472,7 +1472,7 @@ struct tree_opt_pass pass_store_ccp =
   TV_TREE_STORE_CCP,			/* tv_id */
   PROP_cfg | PROP_ssa | PROP_alias,	/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,			/* properties_destroyed */
+  0,					/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_dump_func | TODO_update_ssa
     | TODO_ggc_collect | TODO_verify_ssa
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 134cfe934e8d052a69efd13d359c45580a30991f..7656f365d8f8ebdfe81efd705ba0b7d7c9efcb35 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -380,7 +380,7 @@ struct tree_opt_pass pass_dominator =
   TV_TREE_SSA_DOMINATOR_OPTS,		/* tv_id */
   PROP_cfg | PROP_ssa | PROP_alias,	/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,			/* properties_destroyed */
+  0,					/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_dump_func
     | TODO_update_ssa
@@ -2521,7 +2521,7 @@ struct tree_opt_pass pass_phi_only_cprop =
   TV_TREE_PHI_CPROP,                    /* tv_id */
   PROP_cfg | PROP_ssa | PROP_alias,     /* properties_required */
   0,                                    /* properties_provided */
-  PROP_smt_usage,                       /* properties_destroyed */
+  0,		                        /* properties_destroyed */
   0,                                    /* todo_flags_start */
   TODO_cleanup_cfg | TODO_dump_func 
     | TODO_ggc_collect | TODO_verify_ssa
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index dd20d00bf228e84fa9140f3f5cdd88fb9f2ee2f0..492c9a0ada41efc56817d1b7b999250e6551e6ff 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -1049,7 +1049,7 @@ struct tree_opt_pass pass_forwprop = {
   PROP_cfg | PROP_ssa
     | PROP_alias,		/* properties_required */
   0,				/* properties_provided */
-  PROP_smt_usage,		/* properties_destroyed */
+  0,				/* properties_destroyed */
   0,				/* todo_flags_start */
   TODO_dump_func /* todo_flags_finish */
   | TODO_ggc_collect
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 3cdc48a9b909e94340ee579535c0693b751a4765..c92c0e72a2c7368df36b3dc95746044a44baa942 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -1303,17 +1303,8 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
 	  if (v_ann->is_aliased
 	      || none_added
 	      || (TREE_CODE (var) == SYMBOL_MEMORY_TAG
-		  && for_clobber
-		  && SMT_USED_ALONE (var)))
+		  && for_clobber))
 	    {
-	      /* Every bare SMT def we add should have SMT_USED_ALONE
-		 set on it, or else we will get the wrong answer on
-		 clobbers.  */
-	      if (none_added
-		  && !updating_used_alone && gimple_aliases_computed_p (cfun)
-		  && TREE_CODE (var) == SYMBOL_MEMORY_TAG)
-		gcc_assert (SMT_USED_ALONE (var));
-
 	      append_v_may_def (var);
 	    }
 	}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 759bf7518e08285d4ed3755c6b06a4773830f499..bbbaa5b169a70755786b71be044277381ed110fc 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -4810,7 +4810,7 @@ struct tree_opt_pass pass_vrp =
   TV_TREE_VRP,				/* tv_id */
   PROP_ssa | PROP_alias,		/* properties_required */
   0,					/* properties_provided */
-  PROP_smt_usage,			/* properties_destroyed */
+  0,					/* properties_destroyed */
   0,					/* todo_flags_start */
   TODO_cleanup_cfg
     | TODO_ggc_collect
diff --git a/gcc/tree.h b/gcc/tree.h
index 50a7762bc5b93527c2c60ff1455c173e32591ffc..98be968af50463cc991bb1510c72f386adcb0a70 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2407,22 +2407,10 @@ struct tree_memory_tag GTY(())
 {
   struct tree_decl_minimal common;
   unsigned int is_global:1;
-  unsigned int is_used_alone:1;
-  unsigned int old_used_alone:1;
 };
 
 #define MTAG_GLOBAL(NODE) (TREE_MEMORY_TAG_CHECK (NODE)->mtag.is_global)
 
-/* This flag is true if a SMT is used as the V_MAY_DEF or VUSE operand
-   directly, because the access had all of the SMT's aliases pruned
-   from it.  */
-#define SMT_USED_ALONE(NODE) (SYMBOL_MEMORY_TAG_CHECK (NODE)->mtag.is_used_alone)
-
-/* This flag is used to temporarily store the old value of the used alone
-   flag when updating so we know whether to mark the symbol for
-   renaming.  */
-#define SMT_OLD_USED_ALONE(NODE) (SYMBOL_MEMORY_TAG_CHECK (NODE)->mtag.old_used_alone)
-
 struct tree_struct_field_tag GTY(())
 {
   struct tree_memory_tag common;