Use tree_vector_builder::new_unary_operation for folding
commit6af4f299001b76e9902d2b6b6c7978d255d55d44
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Dec 2017 18:41:13 +0000 (7 18:41 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 7 Dec 2017 18:41:13 +0000 (7 18:41 +0000)
treeb17857f981feeaf586dbb8d29c15e3b8ae09de91
parent6a8c2cbca61e344378cd59024cb443dd97b9ac2e
Use tree_vector_builder::new_unary_operation for folding

This patch makes fold-const.c operate directly on the VECTOR_CST
encoding when folding an operation that has a single VECTOR_CST input.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* fold-const.c (fold_negate_expr_1): Use tree_vector_builder and
new_unary_operation, operating only on the encoded elements.
(const_unop): Likewise.
(exact_inverse): Likewise.
(distributes_over_addition_p): New function.
(const_binop): Use tree_vector_builder and new_unary_operation
for combinations of VECTOR_CST and INTEGER_CST.  Operate only
on the encoded elements unless the encoding is strided and the
operation does not distribute over addition.
(fold_convert_const):  Use tree_vector_builder and
new_unary_operation.  Operate only on the encoded elements
for truncating integer conversions, or for non-stepped encodings.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255476 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/fold-const.c