OSDN Git Service

* config/arm/crti.asm: Give _init and _fini function type.
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa-copy.c
index 7b27c68..dc41e8e 100644 (file)
@@ -112,8 +112,8 @@ may_propagate_copy (tree dest, tree orig)
        return false;
       else if (!lang_hooks.types_compatible_p (type_d, type_o))
        return false;
-      else if (!alias_sets_conflict_p (get_alias_set (type_d),
-                                      get_alias_set (type_o)))
+      else if (get_alias_set (TREE_TYPE (type_d)) != 
+              get_alias_set (TREE_TYPE (type_o)))
        return false;
     }
 
@@ -145,17 +145,27 @@ may_propagate_copy (tree dest, tree orig)
       && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig))
     return false;
 
-  /* If DEST is an SSA_NAME that flows from an abnormal edge or if it
-     represents a hard register, then it cannot be replaced.  */
+  /* If DEST is an SSA_NAME that flows from an abnormal edge, then it
+     cannot be replaced.  */
   if (TREE_CODE (dest) == SSA_NAME
-      && (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest)
-         || DECL_HARD_REGISTER (SSA_NAME_VAR (dest))))
+      && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
     return false;
 
   /* Anything else is OK.  */
   return true;
 }
 
+/* Similarly, but we know that we're propagating into an ASM_EXPR.  */
+
+bool
+may_propagate_copy_into_asm (tree dest)
+{
+  /* Hard register operands of asms are special.  Do not bypass.  */
+  return !(TREE_CODE (dest) == SSA_NAME
+          && TREE_CODE (SSA_NAME_VAR (dest)) == VAR_DECL
+          && DECL_HARD_REGISTER (SSA_NAME_VAR (dest)));
+}
+
 
 /* Given two SSA_NAMEs pointers ORIG and NEW such that we are copy
    propagating NEW into ORIG, consolidate aliasing information so that