https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111010
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f3a3305ac4f..d38b9d764d8 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -11511,7 +11511,7 @@ }) (define_insn_and_split "*concat<mode><dwi>3_3" - [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r,r,&r") + [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r,r,!&r") (any_or_plus:<DWI> (ashift:<DWI> (zero_extend:<DWI> fixes the issue for me, this disparages the &r,m,m alternative since that makes any reloading difficult(?) and the early-clobber output makes register pressure even harder to deal with.