From e18921c98e2ae9809ff08f0ec034c5676e1473c9 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 11 Dec 2003 08:58:00 +0100 Subject: [PATCH] backport: re PR rtl-optimization/13060 ([g77] ICE in fixup_var_refs_1, at function.c:1947 on correct code with "-O2 -fno-force-mem") Backport from mainline: 2003-12-07 Eric Botcazou PR optimization/13060 * function.c (fixup_var_refs_1) [SUBREG]: Recognize even if a replacement already exists. Fix again the whole insn if that fails. From-SVN: r74531 --- gcc/ChangeLog | 10 ++++++++++ gcc/function.c | 16 ++++++++++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ 3 files changed, 34 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69c4bbb3e9a0..44955b318e69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2003-12-11 Eric Botcazou + + Backport from mainline: + + 2003-12-07 Eric Botcazou + + PR optimization/13060 + * function.c (fixup_var_refs_1) [SUBREG]: Recognize even if a + replacement already exists. Fix again the whole insn if that fails. + 2003-12-11 Eric Botcazou Backport from mainline: diff --git a/gcc/function.c b/gcc/function.c index 3d2440a849be..eedd909c4363 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2180,7 +2180,23 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements, no_share) replacement = find_fixup_replacement (replacements, x); if (replacement->new) { + enum machine_mode mode = GET_MODE (x); *loc = replacement->new; + + /* Careful! We may have just replaced a SUBREG by a MEM, which + means that the insn may have become invalid again. We can't + in this case make a new replacement since we already have one + and we must deal with MATCH_DUPs. */ + if (GET_CODE (replacement->new) == MEM) + { + INSN_CODE (insn) = -1; + if (recog_memoized (insn) >= 0) + return; + + fixup_var_refs_1 (replacement->new, mode, &PATTERN (insn), + insn, replacements, no_share); + } + return; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b36c36ca24d0..5577bcd74896 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2003-12-11 Eric Botcazou + + Backport from mainline: + + 2003-12-07 Eric Botcazou + + * g77.f-torture/compile/13060.f: New test. + 2003-12-11 Eric Botcazou Backport from mainline: -- 2.47.2