aboutsummaryrefslogtreecommitdiff
path: root/gcc/recog.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-02-05 15:35:46 +0100
committerJakub Jelinek <jakub@redhat.com>2020-02-05 15:35:46 +0100
commit17a2e8c0918c2ddda82ace9ed17464906f96633d (patch)
treef70ceb653262d53b6ac31f346bd290cd3041b644 /gcc/recog.c
parent9847df2c9573f1e4b948b5a7272c6aadf8e01c22 (diff)
downloadgcc-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.c15
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
}