diff options
author | Richard Biener <rguenther@suse.de> | 2016-05-24 07:55:56 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-05-24 07:55:56 +0000 |
commit | f17a223de829cb5fa0b32a9f12c22a4fa929506c (patch) | |
tree | 8563bc5695a3444a499e0c3f237354120053f294 /gcc/testsuite/c-c++-common/vector-subscript-4.c | |
parent | 64fc0cd9b2a83a4b0301d8d7890bf27880d8384e (diff) |
re PR middle-end/70434 (adding an extraneous cast to vector type results in inferior code)
2016-05-24 Richard Biener <rguenther@suse.de>
PR middle-end/70434
PR c/69504
c-family/
* c-common.h (convert_vector_to_pointer_for_subscript): Rename to ...
(convert_vector_to_array_for_subscript): ... this.
* c-common.c (convert_vector_to_pointer_for_subscript): Use a
VIEW_CONVERT_EXPR to an array type. Rename to ...
(convert_vector_to_array_for_subscript): ... this.
cp/
* expr.c (mark_exp_read): Handle VIEW_CONVERT_EXPR.
* constexpr.c (cxx_eval_array_reference): Handle indexed
vectors.
* typeck.c (cp_build_array_ref): Adjust.
c/
* c-typeck.c (build_array_ref): Do not complain about indexing
non-lvalue vectors. Adjust for function name change.
* tree-ssa.c (non_rewritable_mem_ref_base): Make sure to mark
bases which are accessed with non-invariant indices.
* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Re-write
constant index ARRAY_REFs of vectors into BIT_FIELD_REFs.
* c-c++-common/vector-subscript-4.c: New testcase.
* c-c++-common/vector-subscript-5.c: Likewise.
From-SVN: r236630
Diffstat (limited to 'gcc/testsuite/c-c++-common/vector-subscript-4.c')
-rw-r--r-- | gcc/testsuite/c-c++-common/vector-subscript-4.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/vector-subscript-4.c b/gcc/testsuite/c-c++-common/vector-subscript-4.c new file mode 100644 index 00000000000..2c2481f88b7 --- /dev/null +++ b/gcc/testsuite/c-c++-common/vector-subscript-4.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized -w -Wno-psabi" } */ + +#define foobar(n) \ + typedef int v##n##si __attribute__ ((vector_size (4 * n))); \ +\ +int \ +foo##n(int x, v##n##si v) \ +{ \ + v[0] ^= v[1]; \ + return ((v##n##si)v)[x]; \ +} \ +\ +int \ +bar##n(int x, v##n##si v) \ +{ \ + v[0] ^= v[1]; \ + return v[x]; \ +} + +foobar(2) +foobar(4) +foobar(8) +foobar(16) +foobar(32) +foobar(64) + +/* Verify we don't have any vector temporaries in the IL. */ +/* { dg-final { scan-tree-dump-not "vector" "optimized" } } */ |