+2019-11-18 Matthew Malcomson <matthew.malcomson@arm.com>
+
+ * run-rtl-passes.c (run_rtl_passes): Accept and handle empty
+ "initial_pass_name" argument -- by running "*clean_state" pass.
+ Also free the "initial_pass_name" when done.
+
2019-11-18 Richard Biener <rguenther@suse.de>
PR rtl-optimization/92462
+2019-11-18 Matthew Malcomson <matthew.malcomson@arm.com>
+
+ * c-parser.c (c_parser_parse_rtl_body): Always call
+ run_rtl_passes, even if startwith pass is not provided.
+
2019-11-15 Joseph Myers <joseph@codesourcery.com>
* c-parser.c (c_parser_std_attribute_specifier): Diagnose
return;
}
- /* If a pass name was provided for START_WITH_PASS, run the backend
- accordingly now, on the cfun created above, transferring
- ownership of START_WITH_PASS. */
- if (start_with_pass)
- run_rtl_passes (start_with_pass);
+ /* Run the backend on the cfun created above, transferring ownership of
+ START_WITH_PASS. */
+ run_rtl_passes (start_with_pass);
}
#include "gt-c-c-parser.h"
switch_to_section (text_section);
(*debug_hooks->assembly_start) ();
- /* Pass "expand" normally sets this up. */
+ if (initial_pass_name)
+ {
+ /* Pass "expand" normally sets this up. */
#ifdef INSN_SCHEDULING
- init_sched_attrs ();
+ init_sched_attrs ();
#endif
+ bitmap_obstack_initialize (NULL);
+ bitmap_obstack_initialize (®_obstack);
+ opt_pass *rest_of_compilation
+ = g->get_passes ()->get_rest_of_compilation ();
+ gcc_assert (rest_of_compilation);
+ execute_pass_list (cfun, rest_of_compilation);
- bitmap_obstack_initialize (NULL);
- bitmap_obstack_initialize (®_obstack);
-
- opt_pass *rest_of_compilation
- = g->get_passes ()->get_rest_of_compilation ();
- gcc_assert (rest_of_compilation);
- execute_pass_list (cfun, rest_of_compilation);
-
- opt_pass *clean_slate = g->get_passes ()->get_clean_slate ();
- gcc_assert (clean_slate);
- execute_pass_list (cfun, clean_slate);
-
- bitmap_obstack_release (®_obstack);
+ opt_pass *clean_slate = g->get_passes ()->get_clean_slate ();
+ gcc_assert (clean_slate);
+ execute_pass_list (cfun, clean_slate);
+ bitmap_obstack_release (®_obstack);
+ }
+ else
+ {
+ opt_pass *clean_slate = g->get_passes ()->get_clean_slate ();
+ gcc_assert (clean_slate);
+ execute_pass_list (cfun, clean_slate);
+ }
cfun->curr_properties |= PROP_rtl;
+ free (initial_pass_name);
}
+2019-11-18 Matthew Malcomson <matthew.malcomson@arm.com>
+
+ * gcc.dg/rtl/aarch64/unspecified-pass-error.c: New test.
+
2019-11-18 Christophe Lyon <christophe.lyon@linaro.org>
* lib/target-supports.exp
--- /dev/null
+/* { dg-do compile { target aarch64-*-* } } */
+/* { dg-additional-options "-O0" } */
+
+/*
+ Ensure an __RTL function with an unspecified "startwith" pass doesn't cause
+ an assertion error on the next function.
+ */
+
+int __RTL () badfoo ()
+{
+(function "badfoo"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
+ (cinsn 10 (use (reg/i:SI x19)))
+ (edge-to exit (flags "FALLTHRU"))
+ ) ;; block 2
+ ) ;; insn-chain
+) ;; function "foo2"
+}
+
+/* Compile a valid C function to test the clean_state pass has been run. */
+int
+foo_a ()
+{
+ return 200;
+}
+