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.

From-SVN: r235852
This commit is contained in:
Alan Modra 2016-05-04 09:41:32 +09:30 committed by Alan Modra
parent 475839b6db
commit 343d0287f2
2 changed files with 5 additions and 1 deletions

View File

@ -1,3 +1,7 @@
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

View File

@ -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),