rs6000: Unaligned stfiwx on older CPUs (PR89746)
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 19 Mar 2019 16:58:42 +0000 (17:58 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 19 Mar 2019 16:58:42 +0000 (17:58 +0100)
commite8926ce09f3ef0795b87dc922f431157e6916748
tree27529516a80a71b94af1fe3a2dfaa158936fc923
parentbb48c402f4ca67c9e5d0ed1104700c50058d6fb8
rs6000: Unaligned stfiwx on older CPUs (PR89746)

The "classic" PowerPCs (6xx/7xx) are not STRICT_ALIGNMENT, but their
floating point units are.  This is not normally a problem, the ABIs
make everything FP aligned.  The RTL patterns converting FP to integer
however get a potentially unaligned destination, and we do not want to
do an stfiwx on that on such older CPUs.

This fixes it.  It does not change anything for TARGET_MFCRF targets
(POWER4 and later).  It also won't change anything for strict-alignment
targets, or CPUs without hardware FP of course, or CPUs that do not
implement stfiwx (older 4xx/5xx/8xx).

It does not change the corresponding fixuns* pattern, because that can
not be enabled on any CPU that cannot handle unaligned FP well.

PR target/89746
* config/rs6000/rs6000.md (fix_trunc<mode>si2_stfiwx): If we have a
non-TARGET_MFCRF target, and the dest is memory but not 32-bit aligned,
go via a stack temporary.

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