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

Hongtao.liu <crazylht at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |crazylht at gmail dot com

--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Richard Biener from comment #0)
> We have
> 
> (define_expand "maskload<mode><sseintvecmodelower>"
>   [(set (match_operand:V48_AVX2 0 "register_operand")
>     (unspec:V48_AVX2
>       [(match_operand:<sseintvecmode> 2 "register_operand")
>        (match_operand:V48_AVX2 1 "memory_operand")]
>       UNSPEC_MASKMOV))]
>   "TARGET_AVX")
> 
> and
> 
> (define_mode_iterator V48_AVX2
>   [V4SF V2DF
>    V8SF V4DF
>    (V4SI "TARGET_AVX2") (V2DI "TARGET_AVX2")
>    (V8SI "TARGET_AVX2") (V4DI "TARGET_AVX2")])
> 
> so for example maskloadv4siv4si is disabled with just -mavx while the actual
> instruction can operate just fine on SImode sized data by pretending its
> SFmode.
> 
> check_effective_target_vect_masked_load is conditional on AVX, not AVX2.
> 
> With just AVX we can still use SSE2 vectorization for integer operations
> using
> masked loads/stores from AVX.

I see, we can add an alternative like "noavx2,avx2" to generate vmaskmovps/pd
when avx2 is not available for integer.

Reply via email to