OSDN Git Service

2002-03-13 Aldy Hernandez <aldyh@redhat.com>
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Mar 2002 02:03:36 +0000 (02:03 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Mar 2002 02:03:36 +0000 (02:03 +0000)
        * expmed.c (store_bit_field): Reset alias set for memory.
        (extract_bit_field): Same.

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

gcc/ChangeLog
gcc/expmed.c

index 48d9949..761ecb3 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-13  Aldy Hernandez  <aldyh@redhat.com>
+
+        * expmed.c (store_bit_field): Reset alias set for memory.
+        (extract_bit_field): Same.
+
 2002-03-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * c-common.c (c_tree_code_type, c_tree_code_length,
index 6d58ea9..48a3ef6 100644 (file)
@@ -392,6 +392,15 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, total_size)
       }
   }
 
+  /* We may be accessing data outside the field, which means
+     we can alias adjacent data.  */
+  if (GET_CODE (op0) == MEM)
+    {
+      op0 = shallow_copy_rtx (op0);
+      set_mem_alias_set (op0, 0);
+      set_mem_expr (op0, 0);
+    }
+
   /* If OP0 is a register, BITPOS must count within a word.
      But as we have it, it counts within whatever size OP0 now has.
      On a bigendian machine, these are not the same, so convert.  */
@@ -1069,6 +1078,15 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
       }
   }
 
+  /* We may be accessing data outside the field, which means
+     we can alias adjacent data.  */
+  if (GET_CODE (op0) == MEM)
+    {
+      op0 = shallow_copy_rtx (op0);
+      set_mem_alias_set (op0, 0);
+      set_mem_expr (op0, 0);
+    }
+
   /* ??? We currently assume TARGET is at least as big as BITSIZE.
      If that's wrong, the solution is to test for it and set TARGET to 0
      if needed.  */