summaryrefslogtreecommitdiff
path: root/gcc/regrename.c
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2008-09-18 10:17:42 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2008-09-18 10:17:42 +0000
commitfe61f33a25ea7f9ebe642030d7b0a6062c0eed3f (patch)
treed51fb55aa9413a7aeb275dc45346fdedf41db963 /gcc/regrename.c
parent566e7db22a1709f81daf444f317f1241115df7d6 (diff)
downloadgcc-fe61f33a25ea7f9ebe642030d7b0a6062c0eed3f.tar.gz
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
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r--gcc/regrename.c4
1 files changed, 4 insertions, 0 deletions
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))