re PR target/49920 (unable to find a register to spill in class ‘DIREG’)
authorUros Bizjak <uros@gcc.gnu.org>
Sun, 31 Jul 2011 17:50:08 +0000 (19:50 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Sun, 31 Jul 2011 17:50:08 +0000 (19:50 +0200)
commitdeb1f6171dd2d87bdf5f7d76b69336126aaa9cc9
tree3b737a65716e966b955f7fa5d5efa360c774f2b5
parentba4a11ba527c82438130de74c0e9ebdd9f55fde8
re PR target/49920 (unable to find a register to spill in class ‘DIREG’)

PR target/49920
* config/i386/i386.md (strset): Do not expand strset_singleop
when %eax or $edi are fixed.
(*strsetdi_rex_1): Disable when %eax or %edi are fixed.
(*strsetsi_1): Ditto.
(*strsethi_1): Ditto.
(*strsetqi_1): Ditto.
(*rep_stosdi_rex64): Disable when %eax, %ecx or %edi are fixed.
(*rep_stossi): Ditto.
(*rep_stosqi): Ditto.
(cmpstrnsi): Also fail when %ecx is fixed.
(*cmpstrnqi_nz_1): Disable when %ecx, %esi or %edi are fixed.
(*cmpstrnqi_1): Ditto.
(*strlenqi_1): Ditto.
(*strmovdi_rex_1): Disable when %esi or %edi are fixed.
(*strmovsi_1): Ditto.
(*strmovhi_1): Ditto.
(*strmovqi_1): Ditto.
(*rep_movdi_rex64): Disable when %ecx, %esi or %edi are fixed.
(*rep_movsi): Ditto.
(*rep_movqi): Ditto.

testsuite/ChangeLog:

PR target/49920
* gcc.target/i386/pr49920.c: New test.

From-SVN: r176979
gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr49920.c [new file with mode: 0644]