Emit "#" instead of calling gcc_unreachable for invalid insns.
authorUros Bizjak <ubizjak@gmail.com>
Thu, 6 Feb 2020 16:34:21 +0000 (17:34 +0100)
committerUros Bizjak <ubizjak@gmail.com>
Thu, 6 Feb 2020 16:34:21 +0000 (17:34 +0100)
Implement standard approach by emitting "#" for insns that have to be split.

* config/i386/i386.md (*pushtf): Emit "#" instead of
calling gcc_unreachable in insn output.
(*pushxf): Ditto.
(*pushdf): Ditto.
(*pushsf_rex64): Ditto for alternatives other than 1.
(*pushsf): Ditto for alternatives other than 1.

gcc/ChangeLog
gcc/config/i386/i386.md

index bc9c372048861c98f495fcce209c72381f805335..c842c4fc02ffe0bc84c1701637d439e8d1e0c251 100644 (file)
@@ -1,3 +1,12 @@
+2020-02-06  Uroš Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*pushtf): Emit "#" instead of
+       calling gcc_unreachable in insn output.
+       (*pushxf): Ditto.
+       (*pushdf): Ditto.
+       (*pushsf_rex64): Ditto for alternatives other than 1.
+       (*pushsf): Ditto for alternatives other than 1.
+
 2020-02-06  Martin Liska  <mliska@suse.cz>
 
        PR gcov-profile/91971
index 496a8666643bc2876e88192c0bba0ee32238ab9e..34649c010b8b756bdeebab3d236ba1b04c104f0c 100644 (file)
   "TARGET_64BIT || TARGET_SSE"
 {
   /* This insn should be already split before reg-stack.  */
-  gcc_unreachable ();
+  return ("#");
 }
   [(set_attr "isa" "*,x64")
    (set_attr "type" "multi")
   ""
 {
   /* This insn should be already split before reg-stack.  */
-  gcc_unreachable ();
+  return ("#");
 }
   [(set_attr "isa" "*,*,*,nox64,x64")
    (set_attr "type" "multi")
   ""
 {
   /* This insn should be already split before reg-stack.  */
-  gcc_unreachable ();
+  return ("#");
 }
   [(set_attr "isa" "*,nox64,nox64,nox64,x64,sse2")
    (set_attr "type" "multi")
   "TARGET_64BIT"
 {
   /* Anything else should be already split before reg-stack.  */
-  gcc_assert (which_alternative == 1);
+  if (which_alternative != 1)
+    return ("#");
   return "push{q}\t%q1";
 }
   [(set_attr "type" "multi,push,multi")
   "!TARGET_64BIT"
 {
   /* Anything else should be already split before reg-stack.  */
-  gcc_assert (which_alternative == 1);
+  if (which_alternative != 1)
+    return ("#");
   return "push{l}\t%1";
 }
   [(set_attr "type" "multi,push,multi")