diff options
author | Tamar Christina <tamar.christina@arm.com> | 2021-12-01 08:40:25 +0000 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2021-12-01 08:40:25 +0000 |
commit | 29df53fe349073a9210df70ae45662cb3f4a0556 (patch) | |
tree | eb7764c2f2f4bcac8b4352f9944c50ba2209c764 /gcc | |
parent | da9386f9a70ac494939650c0e0a0e4168a6f76d8 (diff) | |
download | gcc-29df53fe349073a9210df70ae45662cb3f4a0556.zip gcc-29df53fe349073a9210df70ae45662cb3f4a0556.tar.gz gcc-29df53fe349073a9210df70ae45662cb3f4a0556.tar.bz2 |
middle-end: move bitmask match.pd pattern and update tests
Following the previous bugfix this addresses the cosmetic and test issues.
The vector tests are moved to vect and the scalar are left where they are.
gcc/ChangeLog:
* match.pd: Move below pattern that rewrites to EQ, NE.
* tree.c (bitmask_inv_cst_vector_p): Correct do .. while indentation.
gcc/testsuite/ChangeLog:
* gcc.dg/bic-bitmask-10.c: Moved to gcc.dg/vect/vect-bic-bitmask-10.c.
* gcc.dg/bic-bitmask-11.c: Moved to gcc.dg/vect/vect-bic-bitmask-11.c.
* gcc.dg/bic-bitmask-12.c: Moved to gcc.dg/vect/vect-bic-bitmask-12.c.
* gcc.dg/bic-bitmask-3.c: Moved to gcc.dg/vect/vect-bic-bitmask-3.c.
* gcc.dg/bic-bitmask-23.c: Moved to gcc.dg/vect/vect-bic-bitmask-23.c.
* gcc.dg/bic-bitmask-2.c: Moved to gcc.dg/vect/vect-bic-bitmask-2.c.
* gcc.dg/bic-bitmask-4.c: Moved to gcc.dg/vect/vect-bic-bitmask-4.c.
* gcc.dg/bic-bitmask-5.c: Moved to gcc.dg/vect/vect-bic-bitmask-5.c.
* gcc.dg/bic-bitmask-6.c: Moved to gcc.dg/vect/vect-bic-bitmask-6.c.
* gcc.dg/bic-bitmask-8.c: Moved to gcc.dg/vect/vect-bic-bitmask-8.c.
* gcc.dg/bic-bitmask-9.c: Moved to gcc.dg/vect/vect-bic-bitmask-9.c.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/match.pd | 28 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-10.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-10.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-11.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-11.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-12.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-12.c) | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-2.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-3.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-23.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-23.c) | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-3.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-2.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-4.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-4.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-5.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-5.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-6.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-6.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-8.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-8.c) | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-9.c (renamed from gcc/testsuite/gcc.dg/bic-bitmask-9.c) | 4 | ||||
-rw-r--r-- | gcc/tree.c | 28 |
13 files changed, 49 insertions, 47 deletions
diff --git a/gcc/match.pd b/gcc/match.pd index d467a1c..0a00b08 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5215,20 +5215,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (eqcmp (bit_and @1 { wide_int_to_tree (ty, mask - rhs); }) { build_zero_cst (ty); })))))) -/* Transform comparisons of the form (X & Y) CMP 0 to X CMP2 Z - where ~Y + 1 == pow2 and Z = ~Y. */ -(for cst (VECTOR_CST INTEGER_CST) - (for cmp (eq ne) - icmp (le gt) - (simplify - (cmp (bit_and:c@2 @0 cst@1) integer_zerop) - (with { tree csts = bitmask_inv_cst_vector_p (@1); } - (if (csts && (VECTOR_TYPE_P (TREE_TYPE (@1)) || single_use (@2))) - (if (TYPE_UNSIGNED (TREE_TYPE (@1))) - (icmp @0 { csts; }) - (with { tree utype = unsigned_type_for (TREE_TYPE (@1)); } - (icmp (convert:utype @0) { csts; })))))))) - /* -A CMP -B -> B CMP A. */ (for cmp (tcc_comparison) scmp (swapped_tcc_comparison) @@ -5715,6 +5701,20 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) replace if (x == 0) with tem = ~x; if (tem != 0) which is clearly less optimal and which we'll transform again in forwprop. */ +/* Transform comparisons of the form (X & Y) CMP 0 to X CMP2 Z + where ~Y + 1 == pow2 and Z = ~Y. */ +(for cst (VECTOR_CST INTEGER_CST) + (for cmp (eq ne) + icmp (le gt) + (simplify + (cmp (bit_and:c@2 @0 cst@1) integer_zerop) + (with { tree csts = bitmask_inv_cst_vector_p (@1); } + (if (csts && (VECTOR_TYPE_P (TREE_TYPE (@1)) || single_use (@2))) + (if (TYPE_UNSIGNED (TREE_TYPE (@1))) + (icmp @0 { csts; }) + (with { tree utype = unsigned_type_for (TREE_TYPE (@1)); } + (icmp (convert:utype @0) { csts; })))))))) + /* When one argument is a constant, overflow detection can be simplified. Currently restricted to single use so as not to interfere too much with ADD_OVERFLOW detection in tree-ssa-math-opts.c. diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-10.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-10.c index 0d04160..fe4f677 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-10.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-10.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -18,7 +18,7 @@ void fun2(int32_t *x, int n) } #define TYPE int32_t -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump {<=\s*.+\{ 255,.+\}} dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967290,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-11.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-11.c index 0e589c9..b77f4d4 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-11.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-11.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) != 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump {>\s*.+\{ 255,.+\}} dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967290,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-12.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-12.c index 50eb563..30d36f4 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-12.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-12.c @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-O3 -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -fdump-tree-dce -w" } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-3.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-2.c index 59ba9a4..58c0b92 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-2.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) == 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-23.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-23.c index b41651b..67119d3 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-23.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-23.c @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-O1 -fdump-tree-dce" } */ +/* { dg-additional-options "-O1 -fdump-tree-dce -w" } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-2.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-3.c index 59ba9a4..58c0b92 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-3.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) == 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-4.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-4.c index 7e0614d..6e2da41 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-4.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) >= 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {=\s*.+\{ 1,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-5.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-5.c index e71b17d..5ef0f46 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-5.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) > 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {>\s*.+\{ 255,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-6.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-6.c index a48a226..22e5f88 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-6.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-6.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~255)) <= 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-8.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-8.c index cd06e0c..edff542 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-8.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-8.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~1)) != 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-times {>\s*.+\{ 1,.+\}} 1 dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967294,.+\}} dce7 { target vect_int } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-9.c b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-9.c index 3d88b74..319d80e 100644 --- a/gcc/testsuite/gcc.dg/bic-bitmask-9.c +++ b/gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-9.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ +/* { dg-additional-options "-O3 -save-temps -fdump-tree-dce -w" } */ #include <stdint.h> @@ -17,7 +17,7 @@ void fun2(uint32_t *x, int n) x[i] = (x[i]&(~5)) == 0; } -#include "bic-bitmask.h" +#include "../bic-bitmask.h" /* { dg-final { scan-tree-dump-not {<=\s*.+\{ 4294967289,.+\}} dce7 { target vect_int } } } */ /* { dg-final { scan-tree-dump {&\s*.+\{ 4294967290,.+\}} dce7 { target vect_int } } } */ @@ -10306,22 +10306,24 @@ bitmask_inv_cst_vector_p (tree t) tree ty = unsigned_type_for (TREE_TYPE (cst)); - do { - if (idx > 0) - cst = vector_cst_elt (t, idx); - wide_int icst = wi::to_wide (cst); - wide_int inv = wi::bit_not (icst); - icst = wi::add (1, inv); - if (wi::popcount (icst) != 1) - return NULL_TREE; + do + { + if (idx > 0) + cst = vector_cst_elt (t, idx); + wide_int icst = wi::to_wide (cst); + wide_int inv = wi::bit_not (icst); + icst = wi::add (1, inv); + if (wi::popcount (icst) != 1) + return NULL_TREE; - tree newcst = wide_int_to_tree (ty, inv); + tree newcst = wide_int_to_tree (ty, inv); - if (uniform) - return build_uniform_cst (newtype, newcst); + if (uniform) + return build_uniform_cst (newtype, newcst); - builder.quick_push (newcst); - } while (++idx < nelts); + builder.quick_push (newcst); + } + while (++idx < nelts); return builder.build (); } |