x86: Always return pseudo register in ix86_gen_scratch_sse_rtx
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 26 Feb 2022 22:17:23 +0000 (14:17 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 4 Mar 2022 03:02:23 +0000 (19:02 -0800)
commit609e8c492d62d92465460eae3d43dfc4b2c68288
treeafee96a75b3547442cf5a61d10a700d7d019bf08
parentfc03ebdceafce7948596aa3b9bb9653ba8205c6d
x86: Always return pseudo register in ix86_gen_scratch_sse_rtx

ix86_gen_scratch_sse_rtx returns XMM7/XMM15/XMM31 as a scratch vector
register to prevent RTL optimizers from removing vector register.  It
introduces a conflict with explicit XMM7/XMM15/XMM31 usage and when it
is called by RTL optimizers, it may introduce conflicting usages of
XMM7/XMM15/XMM31.

Change ix86_gen_scratch_sse_rtx to always return a pseudo register and
xfail x86 tests which are optimized with a hard scratch register.

gcc/

PR target/104704
* config/i386/i386.cc (ix86_gen_scratch_sse_rtx): Always return
a pseudo register.

gcc/testsuite/

PR target/104704
* gcc.target/i386/incoming-11.c: Xfail.
* gcc.target/i386/pieces-memset-3.c: Likewise.
* gcc.target/i386/pieces-memset-37.c: Likewise.
* gcc.target/i386/pieces-memset-39.c: Likewise.
* gcc.target/i386/pieces-memset-46.c: Likewise.
* gcc.target/i386/pieces-memset-47.c: Likewise.
* gcc.target/i386/pieces-memset-48.c: Likewise.
* gcc.target/i386/pr90773-5.c: Likewise.
* gcc.target/i386/pr90773-14.c: Likewise.
* gcc.target/i386/pr90773-17.c: Likewise.
* gcc.target/i386/pr100865-8a.c: Likewise.
* gcc.target/i386/pr100865-8c.c: Likewise.
* gcc.target/i386/pr100865-9c.c: Likewise.
* gcc.target/i386/pieces-memset-21.c: Always expect vzeroupper.
* gcc.target/i386/pr82941-1.c: Likewise.
* gcc.target/i386/pr82942-1.c: Likewise.
* gcc.target/i386/pr82990-1.c: Likewise.
* gcc.target/i386/pr82990-3.c: Likewise.
* gcc.target/i386/pr82990-5.c: Likewise.
* gcc.target/i386/pr100865-11b.c: Expect vmovdqa instead of
vmovdqa64.
* gcc.target/i386/pr100865-12b.c: Likewise.
* gcc.target/i386/pr100865-8b.c: Likewise.
* gcc.target/i386/pr100865-9b.c: Likewise.
* gcc.target/i386/pr104704-1.c: New test.
* gcc.target/i386/pr104704-2.c: Likewise.
* gcc.target/i386/pr104704-3.c: Likewise.
* gcc.target/i386/pr104704-4.c: Likewise.
* gcc.target/i386/pr104704-5.c: Likewise.
* gcc.target/i386/pr104704-6.c: Likewise.
30 files changed:
gcc/config/i386/i386.cc
gcc/testsuite/gcc.target/i386/incoming-11.c
gcc/testsuite/gcc.target/i386/pieces-memset-21.c
gcc/testsuite/gcc.target/i386/pieces-memset-3.c
gcc/testsuite/gcc.target/i386/pieces-memset-37.c
gcc/testsuite/gcc.target/i386/pieces-memset-39.c
gcc/testsuite/gcc.target/i386/pieces-memset-46.c
gcc/testsuite/gcc.target/i386/pieces-memset-47.c
gcc/testsuite/gcc.target/i386/pieces-memset-48.c
gcc/testsuite/gcc.target/i386/pr100865-11b.c
gcc/testsuite/gcc.target/i386/pr100865-12b.c
gcc/testsuite/gcc.target/i386/pr100865-8a.c
gcc/testsuite/gcc.target/i386/pr100865-8b.c
gcc/testsuite/gcc.target/i386/pr100865-8c.c
gcc/testsuite/gcc.target/i386/pr100865-9b.c
gcc/testsuite/gcc.target/i386/pr100865-9c.c
gcc/testsuite/gcc.target/i386/pr104704-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr104704-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr104704-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr104704-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr104704-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr104704-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr82941-1.c
gcc/testsuite/gcc.target/i386/pr82942-1.c
gcc/testsuite/gcc.target/i386/pr82990-1.c
gcc/testsuite/gcc.target/i386/pr82990-3.c
gcc/testsuite/gcc.target/i386/pr82990-5.c
gcc/testsuite/gcc.target/i386/pr90773-14.c
gcc/testsuite/gcc.target/i386/pr90773-17.c
gcc/testsuite/gcc.target/i386/pr90773-5.c