[PATCH] split, i386: Fix up df uses in i386 splitters [PR99104]
Jakub Jelinek
jakub@redhat.com
Tue Feb 16 09:43:49 GMT 2021
On Tue, Feb 16, 2021 at 09:16:40AM +0000, Richard Sandiford wrote:
> But doing it on demand like this seems fragile. And the targets aren't
> a fixed… target. I think we need to design the interface so that things
> are unlikely to go wrong in future rather than design it on the basis
> that things will stay the way they are now.
By making it possible but not required to use df in split passes, at least
if we document it, I don't see why it should be fragile.
In order to benchmark it, I've tried to do release checking build without
and with the following patch. Except with the patch bootstrap fails
miserably, df_analyze in split1 pass doesn't work at -O0 at all.
And for noflow where the cfg doesn't really exit I wouldn't even attempt to
do df_analyze. Plus many backends just call split_all_insns on their own
at various places...
diff --git a/gcc/recog.c b/gcc/recog.c
index abbc49f3f9b..e960d4ba706 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -4380,8 +4380,9 @@ public:
opt_pass * clone () { return new pass_split_all_insns (m_ctxt); }
virtual unsigned int execute (function *)
{
+ df_analyze ();
split_all_insns ();
- return 0;
+ return TODO_df_finish;
}
}; // class pass_split_all_insns
@@ -4425,8 +4426,9 @@ public:
virtual unsigned int execute (function *)
{
+ df_analyze ();
split_all_insns ();
- return 0;
+ return TODO_df_finish;
}
}; // class pass_split_after_reload
@@ -4479,8 +4481,9 @@ public:
virtual unsigned int execute (function *)
{
+ df_analyze ();
split_all_insns ();
- return 0;
+ return TODO_df_finish;
}
}; // class pass_split_before_sched2
@@ -4519,8 +4522,9 @@ public:
virtual bool gate (function *);
virtual unsigned int execute (function *)
{
+ df_analyze ();
split_all_insns ();
- return 0;
+ return TODO_df_finish;
}
}; // class pass_split_before_regstack
Jakub
More information about the Gcc-patches
mailing list