[Bug tree-optimization/91246] vectorization failure for a small loop to search array element

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jul 24 09:56:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91246

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-07-24
             Blocks|                            |53947
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  The issue is

t.c:7:3: note:   ==> examining statement: _25 = .MASK_LOAD (_43, 32B, _42);
t.c:7:3: note:   vect_is_simple_use: operand x_12(D) != _13, type of def:
internal
t.c:7:3: note:   vect_is_simple_use: vectype vector(4) <unnamed type>
t.c:7:3: missed:   unsupported access type for masked load.
t.c:10:12: missed:   not vectorized: relevant stmt not supported: _25 =
.MASK_LOAD (_43, 32B, _42);
t.c:7:3: missed:  bad operation or unsupported loop bound.

possibly because how we if-convert the unrolled inner loop with the
early exit you introduced.  If you remove the early exit then we
elide the outer loop and nothing is left to do (it's replaced by
s *= 1024).

If you remove the early exit and disable the unrolling we vectorize
the loop successfully (but with awkward code generation IMHO).

If you remove the pointless outer loop we no longer unroll the inner
loop but it shows we cannot handle if-converting loops with multiple
exits.

A testcase more closely matching real-world code appreciated.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
[Bug 53947] [meta-bug] vectorizer missed-optimizations


More information about the Gcc-bugs mailing list