diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-08-21 15:27:00 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2012-08-21 13:27:00 +0000 |
commit | 8a3ffc5d39c44c2e7923f5ad39c1b6392c429cb0 (patch) | |
tree | ed52f070800b50c7623028376b73988cddec35ad /gcc/testsuite | |
parent | b6db991c9585c615212f7019484e6d288883ade0 (diff) | |
download | gcc-8a3ffc5d39c44c2e7923f5ad39c1b6392c429cb0.zip gcc-8a3ffc5d39c44c2e7923f5ad39c1b6392c429cb0.tar.gz gcc-8a3ffc5d39c44c2e7923f5ad39c1b6392c429cb0.tar.bz2 |
fold-const.c (fold_ternary_loc): Detect identity permutations.
2012-08-21 Marc Glisse <marc.glisse@inria.fr>
gcc/
* fold-const.c (fold_ternary_loc): Detect identity permutations.
Canonicalize permutations more.
* tree-ssa-forwprop.c (is_combined_permutation_identity): New function.
(simplify_permutation): Likewise.
(ssa_forward_propagate_and_combine): Call it.
gcc/testsuite/
* gcc.dg/tree-ssa/forwprop-19.c: New testcase.
* gcc.dg/fold-perm.c: Likewise.
From-SVN: r190561
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fold-perm.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-19.c | 15 |
3 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6151fc..9bdd4f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-08-21 Marc Glisse <marc.glisse@inria.fr> + + * gcc.dg/tree-ssa/forwprop-19.c: New testcase. + * gcc.dg/fold-perm.c: Likewise. + 2012-08-20 Jan Hubicka <jh@suse.cz> PR fortran/48636 diff --git a/gcc/testsuite/gcc.dg/fold-perm.c b/gcc/testsuite/gcc.dg/fold-perm.c new file mode 100644 index 0000000..7396c1d --- /dev/null +++ b/gcc/testsuite/gcc.dg/fold-perm.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-ccp1" } */ + +typedef int veci __attribute__ ((vector_size (4 * sizeof (int)))); + +void fun (veci *f, veci *g, veci *h) +{ + veci m = { 7, 7, 4, 6 }; + veci n = { 0, 1, 2, 3 }; + veci p = { 1, 1, 7, 6 }; + *h = __builtin_shuffle (*h, *h, p); + *g = __builtin_shuffle (*f, *g, m); + *f = __builtin_shuffle (*f, *g, n); +} + +/* { dg-final { scan-tree-dump "VEC_PERM_EXPR.*{ 3, 3, 0, 2 }" "ccp1" } } */ +/* { dg-final { scan-tree-dump "VEC_PERM_EXPR.*{ 1, 1, 3, 2 }" "ccp1" } } */ +/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 2 "ccp1" } } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-19.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-19.c new file mode 100644 index 0000000..6d25c1b --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-19.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-forwprop2" } */ + +typedef int vec __attribute__((vector_size (4 * sizeof (int)))); +void f (vec *x1, vec *x2) +{ + vec m = { 1, 2, 3, 0 }; + vec n = { 3, 0, 1, 2 }; + vec y = __builtin_shuffle (*x1, *x2, n); + vec z = __builtin_shuffle (y, m); + *x1 = z; +} + +/* { dg-final { scan-tree-dump-not "VEC_PERM_EXPR" "forwprop2" } } */ +/* { dg-final { cleanup-tree-dump "forwprop2" } } */ |