summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-04 00:11:32 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-04 00:11:32 +0000
commit2d1861f52c893d6f4422160cd5d596a5d18cc732 (patch)
tree9fa15ef0c727e87fda693b64ffd578e0e16ffdff
parentb461b04a8238ee3e1661704045707c8926b7053b (diff)
downloadgcc-2d1861f52c893d6f4422160cd5d596a5d18cc732.tar.gz
Combine simplify_set WORD_REGISTER_OPERATIONS
The comment says this test is supposed to prevent "a narrower operation than requested", but it actually only allows a larger subreg not one the same size. Fix that. * combine.c (simplify_set): Correct WORD_REGISTER_OPERATIONS test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@235852 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/combine.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 79fb0f48598..77d81cc5719 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2016-05-04 Alan Modra <amodra@gmail.com>
+ * combine.c (simplify_set): Correct WORD_REGISTER_OPERATIONS test.
+
+2016-05-04 Alan Modra <amodra@gmail.com>
+
PR target/70866
* config/rs6000/rs6000.c (rs6000_stack_info): Don't set cr_save_p
when cr2,3,4 are all fixed regs.
diff --git a/gcc/combine.c b/gcc/combine.c
index 0ab3f97db69..3554f515582 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6736,7 +6736,7 @@ simplify_set (rtx x)
+ (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))
&& (WORD_REGISTER_OPERATIONS
|| (GET_MODE_SIZE (GET_MODE (src))
- < GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))))
+ <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))))
#ifdef CANNOT_CHANGE_MODE_CLASS
&& ! (REG_P (dest) && REGNO (dest) < FIRST_PSEUDO_REGISTER
&& REG_CANNOT_CHANGE_MODE_P (REGNO (dest),