i386: Fix and improve movhi_internal and movhf_internal some more.
commitca5667e867252db3c8642ee90f55427149cd92b6
authorUros Bizjak <ubizjak@gmail.com>
Mon, 29 Nov 2021 21:16:12 +0000 (29 22:16 +0100)
committerUros Bizjak <ubizjak@gmail.com>
Mon, 29 Nov 2021 21:17:20 +0000 (29 22:17 +0100)
tree63b20ecc038f1f5c3ec9a21db9943143180d3eaf
parentf81c5a86dc03352682ac8ae3daa6ec507528a265
i386: Fix and improve movhi_internal and movhf_internal some more.

An (*v,C) alternative can be added to movhi_internal to directly load
HImode constant 0 to xmm register. Also, V4SFmode moves can be used
for xmm->xmm moves instead of TImode moves when optimizing for size.
Fix invalid %vpinsrw insn template, which needs to duplicate %xmm
register for AVX targets.

Optimize GPR moves in movhf_internal in the same way as in movhi_internal.
Fix pinsrw and pextrw templates for AVX targets. Use sselog1
instead of sselog type.  Also, handle TARGET_SSE_PARTIAL_REG_DEPENDENCY
and TARGET_SSE_SPLIT_REGS targets.

2021-11-29  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

PR target/102811
* config/i386/i386.md (*movhi_internal): Introduce (*v,C) alternative.
Do not allocate non-GPR registers.  Optimize xmm->xmm moves when
optimizing for size.  Fix vpinsrw insn template.
(*movhf_internal): Fix pinsrw and pextrw insn templates for
AVX targets. Use sselog1 type instead of sselog.  Optimize GPR moves.
Optimize xmm->xmm moves for TARGET_SSE_PARTIAL_REG_DEPENDENCY
and TARGET_SSE_SPLIT_REGS targets.
gcc/config/i386/i386.md