aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/generated/pack_i2.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-07-28 13:48:39 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-08-20 08:53:23 +0200
commitf30aa394e4b14e6d55e349344fe8e0b23e0a7d06 (patch)
treeebeedff4b1305bde1801a3cf412fd80b7a387522 /libgfortran/generated/pack_i2.c
parente78eb2f85b9b61cf193dfc721bbd58966bea76df (diff)
downloadgcc-f30aa394e4b14e6d55e349344fe8e0b23e0a7d06.zip
gcc-f30aa394e4b14e6d55e349344fe8e0b23e0a7d06.tar.gz
gcc-f30aa394e4b14e6d55e349344fe8e0b23e0a7d06.tar.bz2
Record get_load_store_info results from analysis
The following is a patch to make us record the get_load_store_info results from load/store analysis and re-use them during transform. In particular this moves where SLP_TREE_MEMORY_ACCESS_TYPE is stored. A major hassle was (and still is, to some extent), gather/scatter handling with it's accompaning gather_scatter_info. As get_load_store_info no longer fully re-analyzes them but parts of the information is recorded in the SLP tree during SLP build the following goes and eliminates the use of this data in vectorizable_load/store, instead recording the other relevant part in the load-store info (namely the IFN or decl chosen). Strided load handling keeps the re-analysis but populates the data back to the SLP tree and the load-store info. That's something for further improvement. This also shows that early classifying a SLP tree as load/store and allocating the load-store data might be a way to move back all of the gather/scatter auxiliary data into one place. Rather than mass-replacing references to variables I've kept the locals but made them read-only, only adjusting a few elsval setters and adding a FIXME to strided SLP handling of alignment (allowing local override there). The FIXME shows that while a lot of analysis is done in get_load_store_type that's far from all of it. There's also a possibility that splitting up the transform phase into separate load/store def types, based on VMAT choosen, will make the code more maintainable. * tree-vectorizer.h (vect_load_store_data): New. (_slp_tree::memory_access_type): Remove. (SLP_TREE_MEMORY_ACCESS_TYPE): Turn into inline function. * tree-vect-slp.cc (_slp_tree::_slp_tree): Do not initialize SLP_TREE_MEMORY_ACCESS_TYPE. * tree-vect-stmts.cc (check_load_store_for_partial_vectors): Remove gather_scatter_info pointer argument, instead get info from the SLP node. (vect_build_one_gather_load_call): Get SLP node and builtin decl as argument and remove uses of gather_scatter_info. (vect_build_one_scatter_store_call): Likewise. (vect_get_gather_scatter_ops): Remove uses of gather_scatter_info. (vect_get_strided_load_store_ops): Get SLP node and remove uses of gather_scatter_info. (get_load_store_type): Take pointer to vect_load_store_data instead of individual pointers. (vectorizable_store): Adjust. Re-use get_load_store_type result from analysis time. (vectorizable_load): Likewise.
Diffstat (limited to 'libgfortran/generated/pack_i2.c')
0 files changed, 0 insertions, 0 deletions