https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79345
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Richard Biener from comment #9) > actually the genemit fix doensn't fully work: > > /space/rguenther/src/svn/trunk/gcc/config/i386/i386.md: In function > ‘rtx_def* gen_smulsi3_highpart(rtx, rtx, rtx)’: > /space/rguenther/src/svn/trunk/gcc/config/i386/i386.md:7380:26: error: > ‘operands[3]’ is used uninitialized in this function [-Werror=uninitialized] > (any_extend:TI > ~~~~~~ ^ > /space/rguenther/src/svn/trunk/gcc/config/i386/i386.md: In function > ‘rtx_def* gen_umulsi3_highpart(rtx, rtx, rtx)’: > /space/rguenther/src/svn/trunk/gcc/config/i386/i386.md:7380:26: error: > ‘operands[3]’ is used uninitialized in this function [-Werror=uninitialized] > (any_extend:TI > ~~~~~~ ^ > ... > > bah. --- gcc/genemit.c.jj 2017-01-01 12:45:35.000000000 +0100 +++ gcc/genemit.c 2017-03-01 10:51:27.474179940 +0100 @@ -518,6 +518,9 @@ gen_expand (md_rtx_info *info) { for (i = 0; i < stats.num_operand_vars; i++) { + if (i > MAX (stats.max_opno, stats.max_dup_opno) + && i <= stats.max_scratch_opno) + continue; printf (" operand%d = operands[%d];\n", i, i); printf (" (void) operand%d;\n", i); } should fix that. Even if some define_insn doesn't have any match_dups, it can still have normal operands.