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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> We don't run LIM after unswitch.
> So
>   _5 = (long unsigned int) xp_19(D);
> 
> is still inside the loop there is no handling of 128bit long long support
> for the vectorizer.
> /app/example.cpp:10:24: note:   get vectype for scalar type: __int128
> unsigned
> /app/example.cpp:16:32: missed:   not vectorized: unsupported data-type
> __int128 unsigned

We have now a few passes that do loop_invariant_motion_in_fun after they
did something - unroll-and-jam and loop-interchange.  We could (should)
add unswitching to that list.

I'll note that there's still making invariant motion work on a loop
granularity to be done (but only when it's going to be reasonably
O(loop size) then, which is a bit difficult due to how it lays out
data structures).

Reply via email to