expmed.c (store_bit_field): Reset alias set for memory.

2002-03-13  Aldy Hernandez  <aldyh@redhat.com>

        * expmed.c (store_bit_field): Reset alias set for memory.
        (extract_bit_field): Same.

From-SVN: r50706
This commit is contained in:
Aldy Hernandez 2002-03-13 02:03:36 +00:00 committed by Aldy Hernandez
parent 2f9834e805
commit 4e9bb42b21
2 changed files with 23 additions and 0 deletions

View 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,

View 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. */