From 226ed43f1efcc6a69e7d1762260918f699485f37 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 18 Sep 2000 21:37:37 +0000 Subject: [PATCH] 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. From-SVN: r36515 --- gcc/ChangeLog | 6 ++++++ gcc/function.c | 8 ++++++++ 2 files changed, 14 insertions(+) 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 + + * 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 * 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);