https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93009
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Created attachment 47537 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47537&action=edit gcc10-pr93009.patch Untested fix. The bug is obvious, these *_bcst_1 patterns used =v,v 0,v v,0 m,m constraints but only a single template for both alternatives, which means if the first alternative was chosen, it was correct, if the second one, it would use the destination register twice instead of the other multiplication argument. So, one option is to add another template that would use %1 instead of %2 for the second alternative, or just use a single alternative with those two operands commutative.