diff options
author | Ian Lance Taylor <iant@golang.org> | 2022-02-11 15:02:44 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2022-02-11 15:02:44 -0800 |
commit | 9a510fb0970d3d9a4201bce8965cabe67850386b (patch) | |
tree | 43d7fd2bbfd7ad8c9625a718a5e8718889351994 /gcc/tree-vector-builder.cc | |
parent | a6d3012b274f38b20e2a57162106f625746af6c6 (diff) | |
parent | 8dc2499aa62f768c6395c9754b8cabc1ce25c494 (diff) | |
download | gcc-9a510fb0970d3d9a4201bce8965cabe67850386b.zip gcc-9a510fb0970d3d9a4201bce8965cabe67850386b.tar.gz gcc-9a510fb0970d3d9a4201bce8965cabe67850386b.tar.bz2 |
Merge from trunk revision 8dc2499aa62f768c6395c9754b8cabc1ce25c494
Diffstat (limited to 'gcc/tree-vector-builder.cc')
-rw-r--r-- | gcc/tree-vector-builder.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gcc/tree-vector-builder.cc b/gcc/tree-vector-builder.cc new file mode 100644 index 0000000..a09d667 --- /dev/null +++ b/gcc/tree-vector-builder.cc @@ -0,0 +1,49 @@ +/* A class for building vector tree constants. + Copyright (C) 2017-2022 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "fold-const.h" +#include "tree-vector-builder.h" + +/* Return a vector element with the value BASE + FACTOR * STEP. */ + +tree +tree_vector_builder::apply_step (tree base, unsigned int factor, + const wide_int &step) const +{ + return wide_int_to_tree (TREE_TYPE (base), + wi::to_wide (base) + factor * step); +} + +/* Return a VECTOR_CST for the current constant. */ + +tree +tree_vector_builder::build () +{ + finalize (); + gcc_assert (pow2p_hwi (npatterns ())); + tree v = make_vector (exact_log2 (npatterns ()), nelts_per_pattern ()); + TREE_TYPE (v) = m_type; + memcpy (VECTOR_CST_ENCODED_ELTS (v), address (), + encoded_nelts () * sizeof (tree)); + return v; +} |