https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Martin Liška from comment #4) > > Another possible way to narrow it down a little bit would be to undo the > > i386.md hunks from that commit one by one and see which one it is, all the 4 > > changes are optimizations and all of them are independent of each other (any > > of them dependent on the i386-expand.cc change which shouldn't change > > anything on its own). > > All right, I was able to revert 3/4 of the hunks in i386.md and the > problematic one that caused the miscompilation is: > > (define_insn_and_split "*concat<mode><dwi>3_3" > [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r,r,&r") > (any_or_plus:<DWI> > (ashift:<DWI> > (zero_extend:<DWI> > (match_operand:DWIH 1 "nonimmediate_operand" "r,m,r,m")) > (match_operand:<DWI> 2 "const_int_operand")) > (zero_extend:<DWI> > (match_operand:DWIH 3 "nonimmediate_operand" "r,r,m,m"))))] > "INTVAL (operands[2]) == <MODE_SIZE> * BITS_PER_UNIT" > "#" > "&& reload_completed" > [(clobber (const_int 0))] > { Does using only that single hunk vs. no hunk at all narrow down further the list of changed functions?