[RS6000] "G" and "H" constraints
authorAlan Modra <amodra@gmail.com>
Thu, 29 Nov 2018 04:58:08 +0000 (15:28 +1030)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 29 Nov 2018 04:58:08 +0000 (15:28 +1030)
commit8529a062e9f2b74733c3ada515e02b30380be7d6
tree39133e9873150f86ddbf8923ac5b4c0fb05081a0
parentabf07e52b2f16ad1234bdb89b9c8b3d704b67b11
[RS6000] "G" and "H" constraints

The patch fixes two cases where the "G" and "H" constraints were used
incorrectly.  Their purpose is calculating insn lengths.  Thus it
never makes sense to put "GH" together or with "F" in an insn
alternative.

movdi_internal32 used "GHF" in an alternative so I replaced that with
"F", and added length attributes for the insn, which were missing.
There are some formatting changes too, to make alternatives line up
with attributes.

The FMOVE128 version of mov<mode>_softfloat also had "GHF" in an
alternative, so "GH" is dropped and "F" moved to a separate
alternative in order to get insn lengths correct.  Well by correct I
mean we need to choose the maximum insn length otherwise branches
might not reach.  Note the very large length for "F".  I think it
would be better to force soft-float long double constants to memory in
64-bit mode, but that's a patch for another day.

* config/rs6000/constraints.md (G, H): Comment on purpose of
constraint.  Correct mode comments and "G" mode test.
* config/rs6000/rs6000.md (movdi_internal32): Remove "GH" from
alternative handling "F".  Add length attr.  Formatting.
(mov<mode>_softfloat <FMOVE128>): Delete "GH" from
alternative, and move "F" to separate alternative.  Correct
insn lengths.

From-SVN: r266607
gcc/ChangeLog
gcc/config/rs6000/constraints.md
gcc/config/rs6000/rs6000.md