namespace {
+/* A container pass (only) for '!targetm.no_register_allocation' targets, for
+ passes to run if reload completed (..., but not run them if it failed, for
+ example for an invalid 'asm'). See also 'pass_late_compilation'. */
+
const pass_data pass_data_postreload =
{
RTL_PASS, /* type */
{}
/* opt_pass methods: */
- bool gate (function *) final override { return reload_completed; }
+ bool gate (function *) final override
+ {
+ if (reload_completed)
+ gcc_checking_assert (!targetm.no_register_allocation);
+ return reload_completed;
+ }
}; // class pass_postreload
namespace {
+/* A container pass like 'pass_postreload', but for passes to run also for
+ 'targetm.no_register_allocation' targets. */
+
const pass_data pass_data_late_compilation =
{
RTL_PASS, /* type */
NEXT_PASS (pass_early_remat);
NEXT_PASS (pass_ira);
NEXT_PASS (pass_reload);
+ /* In the following, some passes are tied to 'pass_postreload' and others
+ to 'pass_late_compilation'. The difference is that the latter also
+ run for 'targetm.no_register_allocation' targets. */
NEXT_PASS (pass_postreload);
PUSH_INSERT_PASSES_WITHIN (pass_postreload)
NEXT_PASS (pass_postreload_cse);