i386: Use SDWIM mode iterator for abs and maxmin [PR97873]
authorUros Bizjak <ubizjak@gmail.com>
Thu, 26 Nov 2020 08:47:01 +0000 (09:47 +0100)
committerUros Bizjak <ubizjak@gmail.com>
Thu, 26 Nov 2020 08:50:33 +0000 (09:50 +0100)
commitacdf30d66cac11757e95541aa35f5ce97de29f63
tree732c84d94d538a3feb2b6662d34c44a5314b760b
parente3068952d7540c51764d1e4e31ef8988492064cf
i386: Use SDWIM mode iterator for abs and maxmin [PR97873]

Generate special double mode sequence also for QImode and HImode.

Without QImode and HImode patterns, middle-end extends operands to SImode
and emits SImode conditional move instruction with paradoxical SImode output
register.  This form is not recognized by STV pass, but a single abs with
input operand in a register would not be converted anyway due to relatively
high register conversion cost.

2020-11-26  Uroš Bizjak  <ubizjak@gmail.com>

PR target/97873

gcc/
* config/i386/i386.md (abs<mode>2): Use SDWIM mode iterator.
(*abs<mode>2_1): Use SWI mode iterator.

(<maxmin:code><mode>3): Use SDWIM mode iterator.
(*<maxmin:code><mode>3_1): Use SWI mode iterator.

gcc/testsuite/
* gcc.target/i386/pr97873-3.c: New test.
gcc/config/i386/i386.md
gcc/testsuite/gcc.target/i386/pr97873-3.c [new file with mode: 0644]