summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-18 21:37:37 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-18 21:37:37 +0000
commitcbc0ce7d635a8cd53666a9e0e163594b230edce8 (patch)
tree5e6df2b61d7151afdaea936370baf4ec0b1d6d21 /gcc
parent55cacb58569cd5a0f71f5167294b38f649c4cbb2 (diff)
downloadgcc-cbc0ce7d635a8cd53666a9e0e163594b230edce8.tar.gz
Fix ia64-linux kernel fn_hash() miscompilation.
* function.c (fixup_var_refs_1, case ZERO_EXTRACT): If we have a paradoxical subreg, then directly substitute the replacement and return. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36515 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/function.c8
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd55ea688f4..da574002f5b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-09-18 Jim Wilson <wilson@cygnus.com>
+
+ * function.c (fixup_var_refs_1, case ZERO_EXTRACT): If we have a
+ paradoxical subreg, then directly substitute the replacement and
+ return.
+
Mon 18-Sep-2000 22:12:44 BST Neil Booth <NeilB@earthling.net>
* cpp.texi: Update documentation, including some clarifications,
diff --git a/gcc/function.c b/gcc/function.c
index 969887fe94f..f05711487b6 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2015,6 +2015,14 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
if (replacement->new == 0)
replacement->new = gen_reg_rtx (GET_MODE (var));
SUBREG_REG (tem) = replacement->new;
+
+ /* The following code works only if we have a MEM, so we
+ need to handle the subreg here. We directly substitute
+ it assuming that a subreg must be OK here. We already
+ scheduled a replacement to copy the mem into the
+ subreg. */
+ XEXP (x, 0) = tem;
+ return;
}
else
tem = fixup_memory_subreg (tem, insn, 0);