https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116126
Bug ID: 116126
Summary: vectorize libcpp search_line_fast
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: andi-gcc at firstfloor dot org
Target Milestone: ---
This is somewhat of a metabug to track vectorization of libcpp/lex.c
search_line_fast, which currently has manual vectorization for various
architectures. It would be better if gcc could just figure it out by itself.
The definition is:
// Find any occurrence for \n \r \\ ? and return pointer to it.
// Can assume that the string ends with \n, so end can be ignored
const unsigned char *search_line_fast (const unsigned char *s, const unsigned
char *end)
{
for (;;) {
if (*s == '\n' || *s == '\r' || *s == '\\' || *s == '?')
return s;
s++;
}
}
currently this fails due to
- Vectorizer cannot determine number of iterations
- Early return is not supported
- if to switch creates an unsupported switch
If we don't ignore end to work around the uncountable problem we get:
const unsigned char *search_line_fast2 (const unsigned char *s, const unsigned
char *end)
{
while (s < end) {
if (*s == '\n' || *s == '\r' || *s == '\\' || *s == '?')
return s;
s++;
}
}