From: Jason Merrill Date: Fri, 13 Nov 2015 22:24:39 +0000 (-0500) Subject: fold-const.c (fold_convert_const): Fold changing cv-quals on VECTOR_CST. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9514e74fcd529835a8963f91e12e1ee853149095;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eeec887f122..74fa2d4da03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2015-11-13 Jason Merrill + * fold-const.c (fold_convert_const): Fold changing cv-quals on + VECTOR_CST. + * hash-map.h (hash_map::empty): New. 2015-11-13 Nathan Sidwell diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9114dec074a..ce59c488b7e 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; } diff --git a/gcc/tree.def b/gcc/tree.def index 41064a8e657..44e5a5e18a5 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -303,7 +303,7 @@ DEFTREECODE (FIXED_CST, "fixed_cst", tcc_constant, 0) whose contents are other constant nodes. */ DEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0) -/* Contents are in TREE_VECTOR_CST_ELTS field. */ +/* Contents are in VECTOR_CST_ELTS field. */ DEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0) /* Contents are TREE_STRING_LENGTH and the actual contents of the string. */