diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-10-25 15:02:42 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2012-10-25 13:02:42 +0000 |
commit | 93100c6b5b45c39b54b25beb5d77e50ea9caa047 (patch) | |
tree | c59298c0a1950703d2a7fcb4db22f59f20b81981 /gcc/tree.c | |
parent | 6ced940d172f65be316637f4945fbf633a79ab90 (diff) | |
download | gcc-93100c6b5b45c39b54b25beb5d77e50ea9caa047.zip gcc-93100c6b5b45c39b54b25beb5d77e50ea9caa047.tar.gz gcc-93100c6b5b45c39b54b25beb5d77e50ea9caa047.tar.bz2 |
re PR c++/54427 (Expose more vector extensions)
2012-10-25 Marc Glisse <marc.glisse@inria.fr>
PR c++/54427
gcc/
* tree.c (signed_or_unsigned_type_for): Handle vectors.
gcc/cp/
* typeck.c (build_x_conditional_expr): Handle VEC_COND_EXPR.
* call.c (build_conditional_expr_1): Likewise.
gcc/c-family/
* c-common.c (scalar_to_vector): Handle VEC_COND_EXPR.
gcc/testsuite/
* g++.dg/ext/vector19.C: New testcase.
From-SVN: r192808
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -10241,6 +10241,17 @@ signed_or_unsigned_type_for (int unsignedp, tree type) if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp) return type; + if (TREE_CODE (type) == VECTOR_TYPE) + { + tree inner = TREE_TYPE (type); + tree inner2 = signed_or_unsigned_type_for (unsignedp, inner); + if (!inner2) + return NULL_TREE; + if (inner == inner2) + return type; + return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type)); + } + if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type)) return NULL_TREE; |