diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 15:35:46 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 15:35:46 +0100 |
commit | 17a2e8c0918c2ddda82ace9ed17464906f96633d (patch) | |
tree | f70ceb653262d53b6ac31f346bd290cd3041b644 /gcc/recog.c | |
parent | 9847df2c9573f1e4b948b5a7272c6aadf8e01c22 (diff) | |
download | gcc-17a2e8c0918c2ddda82ace9ed17464906f96633d.zip gcc-17a2e8c0918c2ddda82ace9ed17464906f96633d.tar.gz gcc-17a2e8c0918c2ddda82ace9ed17464906f96633d.tar.bz2 |
i386: Schedule the only -O0 split pass on x86 after pro_and_epilogue/jump2 [PR92190]
The problem is that x86 is the only target that defines HAVE_ATTR_length and
doesn't schedule any splitting pass at -O0 after pro_and_epilogue.
So, either we go back to handling this during vzeroupper output
(unconditionally, rather than flag_ipa_ra guarded), or we need to tweak the
split* passes for x86.
Seems there are 5 split passes, split1 is run unconditionally before reload,
split2 is run for optimize > 0 or STACK_REGS (x86) after ra but before
epilogue_completed, split3 is run before regstack for STACK_REGS and
optimize and -fno-schedule-insns2, split4 is run before sched2 if sched2 is
run and split5 is run before shorten_branches if HAVE_ATTR_length and not
STACK_REGS.
2020-02-05 Jakub Jelinek <jakub@redhat.com>
PR target/92190
* recog.c (pass_split_after_reload::gate): For STACK_REGS targets,
don't run when !optimize.
(pass_split_before_regstack::gate): For STACK_REGS targets, run even
when !optimize.
Diffstat (limited to 'gcc/recog.c')
-rw-r--r-- | gcc/recog.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index 5dd1a92..5790a58 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -3924,14 +3924,7 @@ public: virtual bool gate (function *) { /* If optimizing, then go ahead and split insns now. */ - if (optimize > 0) - return true; - -#ifdef STACK_REGS - return true; -#else - return false; -#endif + return optimize > 0; } virtual unsigned int execute (function *) @@ -3991,12 +3984,12 @@ pass_split_before_regstack::gate (function *) split until final which doesn't allow splitting if HAVE_ATTR_length. */ # ifdef INSN_SCHEDULING - return (optimize && !flag_schedule_insns_after_reload); + return !optimize || !flag_schedule_insns_after_reload; # else - return (optimize); + return true; # endif #else - return 0; + return false; #endif } |