diff options
author | Jason Merrill <jason@redhat.com> | 2015-11-13 17:24:39 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-11-13 17:24:39 -0500 |
commit | 9514e74fcd529835a8963f91e12e1ee853149095 (patch) | |
tree | 74a61d6b121db6628302dca9478ae704b2173114 /gcc/fold-const.c | |
parent | e45639f3bd6fcc2f28256ef332dc7cc11c83acce (diff) | |
download | gcc-9514e74fcd529835a8963f91e12e1ee853149095.zip gcc-9514e74fcd529835a8963f91e12e1ee853149095.tar.gz gcc-9514e74fcd529835a8963f91e12e1ee853149095.tar.bz2 |
fold-const.c (fold_convert_const): Fold changing cv-quals on VECTOR_CST.
* fold-const.c (fold_convert_const): Fold changing cv-quals on
VECTOR_CST.
From-SVN: r230358
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9114dec..ce59c48 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2095,6 +2095,25 @@ fold_convert_const (enum tree_code code, tree type, tree arg1) else if (TREE_CODE (arg1) == REAL_CST) return fold_convert_const_fixed_from_real (type, arg1); } + else if (TREE_CODE (type) == VECTOR_TYPE) + { + if (TREE_CODE (arg1) == VECTOR_CST + && TYPE_VECTOR_SUBPARTS (type) == VECTOR_CST_NELTS (arg1)) + { + int len = TYPE_VECTOR_SUBPARTS (type); + tree elttype = TREE_TYPE (type); + tree *v = XALLOCAVEC (tree, len); + for (int i = 0; i < len; ++i) + { + tree elt = VECTOR_CST_ELT (arg1, i); + tree cvt = fold_convert_const (code, elttype, elt); + if (cvt == NULL_TREE) + return NULL_TREE; + v[i] = cvt; + } + return build_vector (type, v); + } + } return NULL_TREE; } |