From fe61f33a25ea7f9ebe642030d7b0a6062c0eed3f Mon Sep 17 00:00:00 2001 From: uros Date: Thu, 18 Sep 2008 10:17:42 +0000 Subject: PR rtl-optimization/37544 * regrename.c (maybe_mode_change): Exit early when copy_mode is narrower than orig_mode and narrower than new_mode. testsuite/ChangeLog: PR rtl-optimization/37544 * gcc.dg/pr37544.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140446 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/regrename.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/regrename.c') diff --git a/gcc/regrename.c b/gcc/regrename.c index bd2373cbb5a..e70dae8d139 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -1314,6 +1314,10 @@ maybe_mode_change (enum machine_mode orig_mode, enum machine_mode copy_mode, enum machine_mode new_mode, unsigned int regno, unsigned int copy_regno ATTRIBUTE_UNUSED) { + if (GET_MODE_SIZE (copy_mode) < GET_MODE_SIZE (orig_mode) + && GET_MODE_SIZE (copy_mode) < GET_MODE_SIZE (new_mode)) + return NULL_RTX; + if (orig_mode == new_mode) return gen_rtx_raw_REG (new_mode, regno); else if (mode_change_ok (orig_mode, new_mode, regno)) -- cgit v1.2.3