Hi! The issues fixed by the previous patch together with this one result in the testcase from the PR with -mtune=intel (for some reason with generic tuning we decide to perform the 256-bit load as 2 128-bit loads and don't merge that into 256-bit comparison operand, shall we change that?) to use memory operand directly in vcmpeq* instead of loading it into a register first.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2017-11-06 Jakub Jelinek <ja...@redhat.com> PR target/82855 * config/i386/sse.md (<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Use nonimmediate_operand predicate for operand 1 instead of register_operand. --- gcc/config/i386/sse.md.jj 2017-11-06 11:47:55.103076500 +0100 +++ gcc/config/i386/sse.md 2017-11-06 11:50:16.832266795 +0100 @@ -11168,7 +11168,7 @@ (define_expand "<avx512>_eq<mode>3<mask_ (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1" [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk") (unspec:<avx512fmaskmode> - [(match_operand:VI12_AVX512VL 1 "register_operand" "%v") + [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v") (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")] UNSPEC_MASKED_EQ))] "TARGET_AVX512F @@ -11182,7 +11182,7 @@ (define_insn "<avx512>_eq<mode>3<mask_sc (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1" [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk") (unspec:<avx512fmaskmode> - [(match_operand:VI48_AVX512VL 1 "register_operand" "%v") + [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v") (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")] UNSPEC_MASKED_EQ))] "TARGET_AVX512F Jakub