diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-05-16 16:16:12 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-05-16 16:16:12 -0400 |
commit | 930b4e398ec14f8ea10acb0451655802ed4bb134 (patch) | |
tree | 2668177355b043cb8a05b31d99702e6891b60930 | |
parent | 9c4dcbc7d34f79065433f49e4dc0649dab00d676 (diff) | |
download | gcc-930b4e398ec14f8ea10acb0451655802ed4bb134.zip gcc-930b4e398ec14f8ea10acb0451655802ed4bb134.tar.gz gcc-930b4e398ec14f8ea10acb0451655802ed4bb134.tar.bz2 |
(convert_move): When {zero,sign}_extending, allow a wider intermediate
than to_mode if truncation is a no-op.
From-SVN: r7306
-rw-r--r-- | gcc/expr.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1043,8 +1043,10 @@ convert_move (to, from, unsignedp) /* Search for a mode to convert via. */ for (intermediate = from_mode; intermediate != VOIDmode; intermediate = GET_MODE_WIDER_MODE (intermediate)) - if ((can_extend_p (to_mode, intermediate, unsignedp) - != CODE_FOR_nothing) + if (((can_extend_p (to_mode, intermediate, unsignedp) + != CODE_FOR_nothing) + || (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (intermediate) + && TRULY_NOOP_TRUNCATION (to_mode, intermediate))) && (can_extend_p (intermediate, from_mode, unsignedp) != CODE_FOR_nothing)) { |