builtins.c (get_memory_rtx): Set mem attributes for non-ADDR_EXPR expressions.
authorUlrich Weigand <uweigand@de.ibm.com>
Sun, 26 Sep 2004 19:13:38 +0000 (19:13 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Sun, 26 Sep 2004 19:13:38 +0000 (19:13 +0000)
* builtins.c (get_memory_rtx): Set mem attributes for non-ADDR_EXPR
expressions.  Always clear MEM_SIZE and alias set.

From-SVN: r88141

gcc/ChangeLog
gcc/builtins.c

index 75ba5a7163f9a8948148eff3087655c6b588ce08..718e13116fff34c802b3dc5893f1d572755d43dd 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-26  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * builtins.c (get_memory_rtx): Set mem attributes for non-ADDR_EXPR
+       expressions.  Always clear MEM_SIZE and alias set.
+
 2004-09-26  Roger Sayle  <roger@eyesopen.com>
            Giovanni Bajo  <giovannibajo@gcc.gnu.org>
 
index f3ee9e9b34886689c17d523d7d4aa24e2c16eef1..9127f45b6aa58d3528dc7af633f10865e8fcc255 100644 (file)
@@ -990,15 +990,20 @@ get_memory_rtx (tree exp)
     exp = TREE_OPERAND (exp, 0);
 
   if (TREE_CODE (exp) == ADDR_EXPR)
-    {
-      exp = TREE_OPERAND (exp, 0);
-      set_mem_attributes (mem, exp, 0);
-    }
+    exp = TREE_OPERAND (exp, 0);
   else if (POINTER_TYPE_P (TREE_TYPE (exp)))
+    exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp);
+  else
+    exp = NULL;
+
+  /* Honor attributes derived from exp, except for the alias set
+     (as builtin stringops may alias with anything) and the size
+     (as stringops may access multiple array elements).  */
+  if (exp)
     {
-      exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp);
-      /* memcpy, memset and other builtin stringops can alias with anything.  */
+      set_mem_attributes (mem, exp, 0);
       set_mem_alias_set (mem, 0);
+      set_mem_size (mem, NULL_RTX);
     }
 
   return mem;