From 937e37cc6e345ed695b7bb5b9d58e2ba403fe427 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Sat, 10 Oct 1998 16:03:44 +0000 Subject: [PATCH] * regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION. From-SVN: r22977 --- gcc/ChangeLog | 4 ++++ gcc/regmove.c | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 45908ac8642..a60d9eed2c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Sat Oct 10 17:01:42 1998 Jeffrey A Law (law@cygnus.com) + + * regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION. + Fri Oct 9 22:08:05 1998 Kaveh R. Ghazi * fp-bit.c (SFtype): Don't implicitly use int in declaration. diff --git a/gcc/regmove.c b/gcc/regmove.c index 41235f13704..35ddf12d6f3 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -552,6 +552,14 @@ optimize_reg_copy_3 (insn, dest, src) || GET_CODE (SET_SRC (set)) != MEM || SET_DEST (set) != src_reg) return; + + /* Do not use a SUBREG to truncate from one mode to another if truncation + is not a nop. */ + if (GET_MODE_BITSIZE (GET_MODE (src_reg)) <= GET_MODE_BITSIZE (GET_MODE (src)) + && !TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (src)), + GET_MODE_BITSIZE (GET_MODE (src_reg)))) + return; + old_mode = GET_MODE (src_reg); PUT_MODE (src_reg, GET_MODE (src)); XEXP (src, 0) = SET_SRC (set); -- 2.30.2