diff mbox series

x86: Optimize load of const all 1s float vectors

Message ID 20210807144132.3645400-1-hjl.tools@gmail.com
State New
Headers show
Series x86: Optimize load of const all 1s float vectors | expand

Commit Message

H.J. Lu Aug. 7, 2021, 2:41 p.m. UTC
Update vector_all_ones_operand to return true for const all 1s float
vectors.

gcc/

	PR target/101804
	* config/i386/predicates.md (vector_all_ones_operand): Return
	true for const all 1s float vectors.

gcc/testsuite/

	PR target/101804
	* gcc.target/i386/avx2-gather-2.c: Pass -march=skylake instead
	of "-mavx2 -mtune=skylake".  Scan vpcmpeqd.
---
 gcc/config/i386/predicates.md                 | 7 ++++---
 gcc/testsuite/gcc.target/i386/avx2-gather-2.c | 3 ++-
 2 files changed, 6 insertions(+), 4 deletions(-)

Comments

Uros Bizjak Aug. 8, 2021, 8:23 p.m. UTC | #1
On Sat, Aug 7, 2021 at 4:41 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Update vector_all_ones_operand to return true for const all 1s float
> vectors.
>
> gcc/
>
>         PR target/101804
>         * config/i386/predicates.md (vector_all_ones_operand): Return
>         true for const all 1s float vectors.
>
> gcc/testsuite/
>
>         PR target/101804
>         * gcc.target/i386/avx2-gather-2.c: Pass -march=skylake instead
>         of "-mavx2 -mtune=skylake".  Scan vpcmpeqd.

No, vector_all_ones_operand is intended to be integer minus-one. Use
float_vector_all_ones_operand in a specific place, where it is needed.

Uros.

> ---
>  gcc/config/i386/predicates.md                 | 7 ++++---
>  gcc/testsuite/gcc.target/i386/avx2-gather-2.c | 3 ++-
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
> index 6aa1ea32627..9637e64ea58 100644
> --- a/gcc/config/i386/predicates.md
> +++ b/gcc/config/i386/predicates.md
> @@ -1126,9 +1126,10 @@ (define_predicate "float_vector_all_ones_operand"
>
>  /* Return true if operand is a vector constant that is all ones. */
>  (define_predicate "vector_all_ones_operand"
> -  (and (match_code "const_vector")
> -       (match_test "INTEGRAL_MODE_P (GET_MODE (op))")
> -       (match_test "op == CONSTM1_RTX (GET_MODE (op))")))
> +  (ior (and (match_code "const_vector")
> +           (match_test "INTEGRAL_MODE_P (GET_MODE (op))")
> +           (match_test "op == CONSTM1_RTX (GET_MODE (op))"))
> +       (match_operand 0 "float_vector_all_ones_operand")))
>
>  ; Return true when OP is operand acceptable for vector memory operand.
>  ; Only AVX can have misaligned memory operand.
> diff --git a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
> index 1a704afd834..ad5ef73107c 100644
> --- a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
> +++ b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
> @@ -1,6 +1,7 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O3 -mavx2 -fdump-tree-vect-details -mtune=skylake" } */
> +/* { dg-options "-O3 -fdump-tree-vect-details -march=skylake" } */
>
>  #include "avx2-gather-1.c"
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 16 "vect" } } */
> +/* { dg-final { scan-assembler "vpcmpeqd" } } */
> --
> 2.31.1
>
diff mbox series

Patch

diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 6aa1ea32627..9637e64ea58 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -1126,9 +1126,10 @@  (define_predicate "float_vector_all_ones_operand"
 
 /* Return true if operand is a vector constant that is all ones. */
 (define_predicate "vector_all_ones_operand"
-  (and (match_code "const_vector")
-       (match_test "INTEGRAL_MODE_P (GET_MODE (op))")
-       (match_test "op == CONSTM1_RTX (GET_MODE (op))")))
+  (ior (and (match_code "const_vector")
+	    (match_test "INTEGRAL_MODE_P (GET_MODE (op))")
+	    (match_test "op == CONSTM1_RTX (GET_MODE (op))"))
+       (match_operand 0 "float_vector_all_ones_operand")))
 
 ; Return true when OP is operand acceptable for vector memory operand.
 ; Only AVX can have misaligned memory operand.
diff --git a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
index 1a704afd834..ad5ef73107c 100644
--- a/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
+++ b/gcc/testsuite/gcc.target/i386/avx2-gather-2.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O3 -mavx2 -fdump-tree-vect-details -mtune=skylake" } */
+/* { dg-options "-O3 -fdump-tree-vect-details -march=skylake" } */
 
 #include "avx2-gather-1.c"
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 16 "vect" } } */
+/* { dg-final { scan-assembler "vpcmpeqd" } } */