]> git.ipfire.org Git - people/ms/gcc.git/commit
i386: Add *concat<mode><dwi>3_{5,6,7} patterns [PR107627]
authorJakub Jelinek <jakub@redhat.com>
Thu, 8 Dec 2022 13:55:46 +0000 (14:55 +0100)
committerJakub Jelinek <jakub@redhat.com>
Thu, 8 Dec 2022 13:55:46 +0000 (14:55 +0100)
commit1dc49df4eeaec311f19638861c64e90d7ec696e5
treed932cedc88282c350b01d21b4515bf593fa09e31
parent0ef9991d8767932f51fa97753c16058d17b29b18
i386: Add *concat<mode><dwi>3_{5,6,7} patterns [PR107627]

On Thu, Dec 01, 2022 at 09:09:51AM +0100, Jakub Jelinek via Gcc-patches wrote:
> BTW, I wonder if we couldn't add additional patterns which would catch
> the case where one of the operands is constant.

The following patch does add those.
The difference with the patch on the 2 testcases is:
 baz:
-       movq    8(%rsi), %rax
+       movq    8(%rsi), %rsi
+       movq    %rdi, %r8
        movl    %edx, %ecx
-       xorl    %r8d, %r8d
-       xorl    %edx, %edx
-       movabsq $-2401053089206453570, %r9
-       orq     %r8, %rax
-       orq     %r9, %rdx
-       shrdq   %rdx, %rax
-       movq    %rax, (%rdi)
+       movabsq $-2401053089206453570, %rdi
+       movq    %rsi, %rax
+       shrdq   %rdi, %rax
+       movq    %rax, (%r8)
 qux:
-       movq    (%rsi), %rax
+       movq    %rdi, %r8
+       movq    (%rsi), %rdi
        movl    %edx, %ecx
-       xorl    %r9d, %r9d
-       movabsq $-2401053089206453570, %r8
-       movq    %rax, %rdx
-       xorl    %eax, %eax
-       orq     %r8, %rax
-       orq     %r9, %rdx
-       shrdq   %rdx, %rax
-       movq    %rax, (%rdi)
+       movabsq $-2401053089206453570, %rsi
+       movq    %rsi, %rax
+       shrdq   %rdi, %rax
+       movq    %rax, (%r8)
and
 garply:
        pushl   %esi
-       xorl    %edx, %edx
+       movl    $-559038737, %esi
        pushl   %ebx
        movl    16(%esp), %eax
-       orl     $-559038737, %edx
        movl    20(%esp), %ecx
-       movl    4(%eax), %eax
-       shrdl   %edx, %eax
        movl    12(%esp), %edx
+       movl    4(%eax), %ebx
+       movl    %ebx, %eax
+       shrdl   %esi, %eax
 fred:
...
        movl    16(%esp), %eax
+       movl    $-889275714, %ebx
        movl    20(%esp), %ecx
-       movl    (%eax), %eax
-       movl    %eax, %edx
-       movl    $0, %eax
-       orl     $-889275714, %eax
-       shrdl   %edx, %eax
        movl    12(%esp), %edx
+       movl    (%eax), %esi
+       movl    %ebx, %eax
+       shrdl   %esi, %eax

2022-12-08  Jakub Jelinek  <jakub@redhat.com>

PR target/107627
* config/i386/i386.md (HALF, half): New mode attributes.
(*concat<half><mode>3_5, *concat<mode><dwi>3_6,
*concat<mode><dwi>3_7): New define_insn_and_split patterns.

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