https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118510
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- Something like the following patch should fix the ICE: --cut here-- diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 362b0ddcf40..2f1997bc36c 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -17226,7 +17226,7 @@ (define_insn_and_split "*x86_shrd_2" (clobber (reg:CC FLAGS_REG))])]) (define_insn_and_split "*x86_shrd_ndd_2" - [(set (match_operand:SI 0 "nonimmediate_operand") + [(set (match_operand:SI 0 "register_operand") (ior:SI (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand") (match_operand:QI 3 "nonmemory_operand")) (ashift:SI (match_operand:SI 2 "register_operand") @@ -17236,7 +17236,7 @@ (define_insn_and_split "*x86_shrd_ndd_2" && ix86_pre_reload_split ()" "#" "&& 1" - [(parallel [(set (match_dup 4) + [(parallel [(set (match_dup 0) (ior:SI (lshiftrt:SI (match_dup 1) (and:QI (match_dup 3) (const_int 31))) (subreg:SI @@ -17245,12 +17245,7 @@ (define_insn_and_split "*x86_shrd_ndd_2" (minus:QI (const_int 32) (and:QI (match_dup 3) (const_int 31)))) 0))) - (clobber (reg:CC FLAGS_REG)) - (set (match_dup 0) (match_dup 4))])] -{ - operands[4] = gen_reg_rtx (SImode); - emit_move_insn (operands[4], operands[0]); -}) + (clobber (reg:CC FLAGS_REG))])]) ;; Base name for insn mnemonic. (define_mode_attr cvt_mnemonic --cut here--