From 54ca6ffa139060575be8487db82d2cb551638eb5 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Sat, 6 Feb 1999 09:41:08 +0000 Subject: [PATCH] reload1.c (reload_combine_note_store): Be more careful with STRICT_LOW_PART, ZERO_EXTRACT and SIGN_EXTRACT. * reload1.c (reload_combine_note_store): Be more careful with STRICT_LOW_PART, ZERO_EXTRACT and SIGN_EXTRACT. (move2add_note_store): Likewise. From-SVN: r25055 --- gcc/ChangeLog | 6 ++++++ gcc/reload1.c | 21 +++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6576cb085f..a2439de867f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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 * cppfiles.c (read_and_prescan): Cast the result of `xrealloc' to diff --git a/gcc/reload1.c b/gcc/reload1.c index cfacc78ac50..f2cb20deeaf 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -9732,9 +9732,15 @@ reload_combine_note_store (dst, set) 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; @@ -10056,6 +10062,17 @@ move2add_note_store (dst, set) { 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)) { -- 2.30.2