[PATCH] Fix abort in write_eligible_delay
authorJeff Law <law@redhat.com>
Thu, 22 Oct 2015 19:18:05 +0000 (13:18 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 22 Oct 2015 19:18:05 +0000 (13:18 -0600)
[PATCH] Fix abort in write_eligible_delay
        * genattrtab.c (main): If we do not have any annul-true or annul-false
        slots, then write out a dummy eligible_for_annul_true or
        eligible_for_annul_false as needed.

From-SVN: r229184

gcc/ChangeLog
gcc/genattrtab.c

index 08d26a9367c920e9d24de8de2e1fcb250bb1ee4b..04d8e1639d0c3fd139c70ec8aa72d3c427e115ee 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-22  Jeff Law  <law@redhat.com>
+
+       * genattrtab.c (main): If we do not have any annul-true or annul-false
+       slots, then write out a dummy eligible_for_annul_true or
+       eligible_for_annul_false as needed.
+
 2015-10-22  Nick Clifton  <nickc@redhat.com>
 
        * config/msp430/msp430.opt: Add -msilicon-errata and
index 8d1fa6c9bbf09d2b5a171e239339039a10e48e1c..32b837c287c802c3ac5b659701b535b0171a3004 100644 (file)
@@ -4411,6 +4411,26 @@ write_indent (FILE *outf, int indent)
     fprintf (outf, " ");
 }
 
+/* If the target does not have annul-true or annul-false delay slots, this
+   function will create a dummy eligible_for function on OUTF which always
+   returns false.  KIND will be annul_true or annul_false.  */
+
+static void
+write_dummy_eligible_delay (FILE *outf, const char *kind)
+{
+  /* Write function prelude.  */
+
+  fprintf (outf, "int\n");
+  fprintf (outf, "eligible_for_%s (rtx_insn *delay_insn ATTRIBUTE_UNUSED,\n"
+                "    int slot ATTRIBUTE_UNUSED,\n"
+                "    rtx_insn *candidate_insn ATTRIBUTE_UNUSED,\n"
+                "    int flags ATTRIBUTE_UNUSED)\n",
+          kind);
+  fprintf (outf, "{\n");
+  fprintf (outf, "  return 0;\n");
+  fprintf (outf, "}\n\n");
+}
+
 /* Write a subroutine that is given an insn that requires a delay slot, a
    delay slot ordinal, and a candidate insn.  It returns nonzero if the
    candidate can be placed in the specified delay slot of the insn.
@@ -5307,8 +5327,14 @@ main (int argc, char **argv)
      (The function to compute the number of delay slots will be written
      below.)  */
   write_eligible_delay (attr_file, "delay");
-  write_eligible_delay (attr_file, "annul_true");
-  write_eligible_delay (attr_file, "annul_false");
+  if (have_annul_true)
+    write_eligible_delay (attr_file, "annul_true");
+  else
+    write_dummy_eligible_delay (attr_file, "annul_true");
+  if (have_annul_false)
+    write_eligible_delay (attr_file, "annul_false");
+  else
+    write_dummy_eligible_delay (attr_file, "annul_false");
 
   /* Write out constant delay slot info.  */
   write_const_num_delay_slots (attr_file);