emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_READONLY_P for static const...
authorTom de Vries <tom@codesourcery.com>
Thu, 13 Oct 2011 09:54:50 +0000 (09:54 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 13 Oct 2011 09:54:50 +0000 (09:54 +0000)
2011-10-13  Tom de Vries  <tom@codesourcery.com>

* emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_READONLY_P
for static const strings.
* varasm.c (build_constant_desc): Generate the memory location of the
constant using gen_const_mem.

From-SVN: r179896

gcc/ChangeLog
gcc/emit-rtl.c
gcc/varasm.c

index 01d21350dee5670ad30d7138c1b60f8eda0948ed..c8c7ef8df98d5b81eb5a5abcea5b085254b392f2 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-13  Tom de Vries  <tom@codesourcery.com>
+
+       * emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_READONLY_P
+       for static const strings.
+       * varasm.c (build_constant_desc): Generate the memory location of the
+       constant using gen_const_mem.
+
 2011-10-13  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/50698
index dae7669297aba9a2cffe203222524b1729180042..8465237da60f7a81f7afecb027a040d1a0eb5436 100644 (file)
@@ -1696,6 +1696,12 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
          && !TREE_THIS_VOLATILE (base))
        MEM_READONLY_P (ref) = 1;
 
+      /* Mark static const strings readonly as well.  */
+      if (base && TREE_CODE (base) == STRING_CST
+         && TREE_READONLY (base)
+         && TREE_STATIC (base))
+       MEM_READONLY_P (ref) = 1;
+
       /* If this expression uses it's parent's alias set, mark it such
         that we won't change it.  */
       if (component_uses_parent_alias_set (t))
index 94e31115d1e3e2e2da4741387cea76e587f81ffd..d0de2136bd83dfbb70658872283e8e8adb614080 100644 (file)
@@ -3119,7 +3119,7 @@ build_constant_desc (tree exp)
   SET_SYMBOL_REF_DECL (symbol, decl);
   TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1;
 
-  rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), symbol);
+  rtl = gen_const_mem (TYPE_MODE (TREE_TYPE (exp)), symbol);
   set_mem_attributes (rtl, exp, 1);
   set_mem_alias_set (rtl, 0);
   set_mem_alias_set (rtl, const_alias_set);