https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96246
--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Richard Biener from comment #1) > With -mavx2 it works: > > vpcmpgtd %ymm1, %ymm0, %ymm0 > vpblendvb %ymm0, %ymm2, %ymm3, %ymm0 > > not sure how _load<mode> comes into play - we expand from <avx512>_load<mode>_mask have same rtx pattern as <avx512>_blendm<mode>_, the only difference is constraint(_load<mode>_mask has '0C' for second constraint) --- 1057 (define_insn "<avx512>_load<mode>_mask" 1058 [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v,v") 1059 (vec_merge:V48_AVX512VL 1060 (match_operand:V48_AVX512VL 1 "nonimmediate_operand" "v,m") 1061 (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand" "0C,0C") 1062 (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk,Yk")))] ... 1159 (define_insn "<avx512>_blendm<mode>" 1160 [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v") 1161 (vec_merge:V48_AVX512VL 1162 (match_operand:V48_AVX512VL 2 "nonimmediate_operand" "vm") 1163 (match_operand:V48_AVX512VL 1 "register_operand" "v") 1164 (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))] --- because <avx512>_load<mode>_mask existed early(in line 1057) than <avx512>_blendm<mode> (in line 1159) in md file, after expand, the pattern is always recognized as <avx512>_load<mode>_mask, and pass_reload will only match '0' constraint and missed for 'v' constraint. > > > <bb 2> [local count: 1073741824]: > _6 = .VCOND (a_2(D), b_3(D), c_4(D), d_5(D), 109); > return _6;