On Sat, 2025-01-25 at 23:31 -0800, Andi Kleen wrote: > From: Andi Kleen <a...@gcc.gnu.org> > > This is the hot function in input.cc > > The vectorizer can vectorize it now, but in a generic cpu O2 x86 > build it isn't. > Add a automatic target clone to handle it for x86 and build > that function with O3. > > The ifdef here is ugly, perhaps gcc should have a more convenient > "clone for vectorization if possible" attribute to handle this > portably.
This patch is very cool (no pun intended); how much does it help? The patch is OK by me, but given that we're in stage 4, does a release manager approve? [CCed] Thanks Dave > > gcc/ChangeLog: > > * input.cc: (VECTORIZE): Add definition for x86. > (find_end_of_line): Mark for vectorizer. > --- > gcc/input.cc | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/gcc/input.cc b/gcc/input.cc > index d5d7dbb043e..f1a15de66f1 100644 > --- a/gcc/input.cc > +++ b/gcc/input.cc > @@ -740,11 +740,18 @@ file_cache_slot::maybe_read_data () > return read_data (); > } > > +#if defined(__x86_64__) && __GNUC__ >= 15 > +#define VECTORIZE > __attribute__((target_clones("default,avx2,avx10.2,avx512f"), > optimize("O3"))) > +#else > +#define VECTORIZE > +#endif > + > /* Helper function for file_cache_slot::get_next_line (), to find > the end of > the next line. Returns with the memchr convention, i.e. nullptr > if a line > terminator was not found. We need to determine line endings in > the same > manner that libcpp does: any of \n, \r\n, or \r is a line > ending. */ > > +VECTORIZE > static const char * > find_end_of_line (const char *s, size_t len) > {