https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109
--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> --- > 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))] {