]> git.ipfire.org Git - thirdparty/gcc.git/commit
tree-optimization/104445 - check for vector extraction support
authorRichard Biener <rguenther@suse.de>
Wed, 9 Feb 2022 09:55:18 +0000 (10:55 +0100)
committerRichard Biener <rguenther@suse.de>
Wed, 9 Feb 2022 13:03:31 +0000 (14:03 +0100)
commitda2bf62d9e2a25f2d6a99176144c250b51fbdee7
treec9b7384cd0a3becee9cb8f89c0c407b79d9e76f0
parentab0b5fbfe90168d2e470aefb19e0cf31526290bc
tree-optimization/104445 - check for vector extraction support

This adds a missing check to epilogue reduction re-use, namely
that we can do hi/lo extracts from the vector when demoting it
to the epilogue vector size.

I've chosen to add a can_vec_extract helper to optabs-query.h,
in the future we might want to simplify the vectorizers life by
handling vector-from-vector extraction via BIT_FIELD_REFs during
RTL expansion via the mode punning when the vec_extract is not
directly supported.

I'm not 100% sure we can always do the punning of the
vec_extract result to a vector mode of the same size, but then
I'm also not sure how to check for that (the vectorizer doesn't
in other places it does that at the moment, but I suppose we
eventually just go through memory there)?

2022-02-09  Richard Biener  <rguenther@suse.de>

PR tree-optimization/104445
PR tree-optimization/102832
* optabs-query.h (can_vec_extract): New.
* optabs-query.cc (can_vec_extract): Likewise.
* tree-vect-loop.cc (vect_find_reusable_accumulator): Check
we can extract a hi/lo part from the larger vector, rework
check iteration from larger to smaller sizes.

* gcc.dg/vect/pr104445.c: New testcase.
gcc/optabs-query.cc
gcc/optabs-query.h
gcc/testsuite/gcc.dg/vect/pr102832.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr104445.c [new file with mode: 0644]
gcc/tree-vect-loop.cc