https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107057
--- Comment #7 from Hongtao.liu <crazylht at gmail dot com> --- And it looks like the pattern is wrongly defined since from [1]. ----------cut begin------------ Matching constraints are used in these circumstances. More precisely, the two operands that match must include one input-only operand and one output-only operand. Moreover, the digit must be a smaller number than the number of the operand that uses it in the constraint. ----------------cut end---------- (define_insn "vec_concatv2df" [(set (match_operand:V2DF 0 "register_operand" "=x,x,v,x,v,x,x, v,x,x") (vec_concat:V2DF (match_operand:DF 1 "nonimmediate_operand" " 0,x,v,m,m,0,x,vm,0,0") (match_operand:DF 2 "nonimm_or_0_operand" " x,x,v,1,1,m,m, C,x,m")))] For alternatvie 1, the two operands are both input only. [1] https://gcc.gnu.org/onlinedocs/gccint/Simple-Constraints.html#Simple-Constraints