rs6000: Use memory_operand for all simple {l,st}*brx instructions
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 28 Nov 2019 22:28:59 +0000 (23:28 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 28 Nov 2019 22:28:59 +0000 (23:28 +0100)
commit2538ff0d242b1a1a29f7a4a87c70e9bb2df109e9
tree719483de0f87f5e1086edafdadc4aedd9f911aaa
parent03df119db4f54905f46dbaa4d5bd733200c1c4dd
rs6000: Use memory_operand for all simple {l,st}*brx instructions

We run fwprop before combine, very early even in the case of fwprop1;
and fwprop1 will change memory addressing to what it considers cheaper.
After the "common" change, it now changes the indexed store instruction
in the testcase to be to a constant address.  But that is not an
improvement at all: the byte reverse instructions only exist in the
indexed form, so they will not match anymore.

This patch changes the patterns for the byte reverse instructions to
allow plain memory_operand, letting reload fix this up.

PR target/92602
* config/rs6000/rs6000.md (bswap<mode>2_load for HSI): Change the
indexed_or_indirect_operand to be memory_operand.
(bswap<mode>2_store for HSI): Ditto.
(bswapdi2_load): Ditto.
(bswapdi2_store): Ditto.

From-SVN: r278821
gcc/ChangeLog
gcc/config/rs6000/rs6000.md