Fix low reg issue in Thumb-2 movsi patterns
authorWilco Dijkstra <wdijkstr@arm.com>
Thu, 25 Jul 2019 14:24:41 +0000 (14:24 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Thu, 25 Jul 2019 14:24:41 +0000 (14:24 +0000)
commit75088696935c7e179699cb448e0a2cee74c8494f
tree4959abd461882dadbc9c5b579594de46054e71b4
parent2fc233b73189dd0664fb1cb95865fc5a14396e1f
Fix low reg issue in Thumb-2 movsi patterns

The Thumb-2 movsi patterns try to prefer low registers for loads and stores.
However this is done incorrectly by using 2 separate variants with 'l' and 'h'
register classes.  The register allocator will only use low registers, and
as a result we end up with significantly more spills and moves to high
registers.  Fix this by merging the alternatives and use 'l*r' to indicate
preference for low registers.  This saves ~400 instructions from the pr77308
testcase.

    gcc/
* config/arm/thumb2.md (thumb2_movsi_insn): Fix load/store low reg.
* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.

From-SVN: r273802
gcc/ChangeLog
gcc/config/arm/thumb2.md
gcc/config/arm/vfp.md