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--

Reply via email to