From 32f2ce029997a7d1d4be975ddafd7dcf6574d49c Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson <hp@bitrange.com> Date: Fri, 31 Dec 2004 16:24:48 +0000 Subject: [PATCH] re PR target/18701 (mmix-knuth-mmixware gcc.c-torture/execute failures: 20010224-1.c, 20020216-1.c, 20040218-1.c, 20040709-2.c) PR target/18701 * combine.c (gen_lowpart_for_combine): When stripping SUBREG of MEM, adjust imode and isize. From-SVN: r92760 --- gcc/ChangeLog | 6 ++++++ gcc/combine.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6d95d3d98a4..81d0b997c414 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-12-31 Hans-Peter Nilsson <hp@bitrange.com> + + PR target/18701 + * combine.c (gen_lowpart_for_combine): When stripping SUBREG of + MEM, adjust imode and isize. + 2004-12-30 Richard Henderson <rth@redhat.com> * config/ia64/ia64.c (hfa_element_mode): Return false for diff --git a/gcc/combine.c b/gcc/combine.c index 800e65ea1006..61b93dd30489 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9355,8 +9355,16 @@ gen_lowpart_for_combine (enum machine_mode omode, rtx x) if (GET_CODE (x) == SUBREG && MEM_P (SUBREG_REG (x))) { x = SUBREG_REG (x); - if (GET_MODE (x) == omode) + + /* For use in case we fall down into the address adjustments + further below, we need to adjust the known mode and size of + x; imode and isize, since we just adjusted x. */ + imode = GET_MODE (x); + + if (imode == omode) return x; + + isize = GET_MODE_SIZE (imode); } result = gen_lowpart_common (omode, x); -- GitLab