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

Tamar Christina <tnfchris at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tnfchris at gcc dot gnu.org

--- Comment #2 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
The code in vect_analyze_loop_1 seems to indicate that epilogue loops can't
fail analysis.

Presumably because the original code assumes that the main and epilog loops
were are being analyzed for the same ISA?

In this case the main loop is Adv. SIMD and the epilogue is SVE.

I'm not sure why it's fatal though.. why must epiloque analysis always succeed
even for a mode which didn't succeed for the main loop? e.g. in this case
VNx16QI fails for the main loop as well:

note:   vect_is_simple_use: vectype vector([4,4]) <signed-boolean:4>
missed:   not vectorized: relevant stmt not supported: patt_113 = _60 ^ 1;

It's weird that the analysis thinks it can't invert the mask.. that's a
separate issue that I'll look into as well.

But the main reason for the ice is that the accesses in the DR has a
non-constant step:

Creating dr for *_8
analyze_innermost: Applying pattern match.pd:5184, generic-match-9.cc:4041
Applying pattern match.pd:236, generic-match-3.cc:3751
success.
        base_address: u.0_27
        offset from base address: 0
        constant offset from base address: 0
        step: (ssizetype) (stride.5_19 * 4)
        base alignment: 4
        base misalignment: 0
        offset alignment: 128
        step alignment: 4
        base_object: MEM[(real(kind=4) *)u.0_27]
        Access function 0: {0B, +, (sizetype) (stride.5_19 * 4)}_1

but we get to vect_analyze_data_ref_access with STMT_VINFO_STRIDED_P not set.
It looks like the strided access handling code is missing handling for masked
loads.

Mine.

Reply via email to