+Sat Feb 6 10:31:35 1999 Jeffrey A Law (law@cygnus.com)
+
+ * reload1.c (reload_combine_note_store): Be more careful with
+ STRICT_LOW_PART, ZERO_EXTRACT and SIGN_EXTRACT.
+ (move2add_note_store): Likewise.
+
Sat Feb 6 10:18:01 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cppfiles.c (read_and_prescan): Cast the result of `xrealloc' to
if (GET_CODE (dst) != REG)
return;
regno += REGNO (dst);
+
/* note_stores might have stripped a STRICT_LOW_PART, so we have to be
- careful with registers / register parts that are not full words. */
- if (size < (unsigned) UNITS_PER_WORD)
+ careful with registers / register parts that are not full words.
+
+ Similarly for ZERO_EXTRACT and SIGN_EXTRACT. */
+ if (GET_CODE (set) != SET
+ || GET_CODE (SET_DEST (set)) == ZERO_EXTRACT
+ || GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
+ || GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
{
reg_state[regno].use_index = -1;
reg_state[regno].store_ruid = reload_combine_ruid;
{
rtx src = SET_SRC (set);
+ /* Indicate that this register has been recently written to,
+ but the exact contents are not available. */
+ if (GET_CODE (SET_DEST (set)) == ZERO_EXTRACT
+ || GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
+ || GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
+ {
+ reg_set_luid[regno] = move2add_luid;
+ reg_offset[regno] = dst;
+ return;
+ }
+
reg_mode[regno] = mode;
switch (GET_CODE (src))
{