On January 30, 2021 10:46:17 AM GMT+01:00, Jakub Jelinek <ja...@redhat.com> wrote: >On Sat, Jan 30, 2021 at 09:17:45AM +0100, Richard Biener wrote: >> >The following patch fixes it, ok for trunk if it passes >> >bootstrap/regtest? >> >> Hmm, that's odd. Who relies on deferred rescan being the default? >Finish >> pass, via processing deferred insns also resets it back. Or is this >> documented somewhere? > >Ifcvt clearly relies on non-deferred rescanning. >And yes, df_finish_pass clears df->changeable_flags, but we don't do >that >for this pass anymore (removal of TODO_df_finish), as that pass didn't >call >df_analyze either. >df_process_deferred_rescans temporarily clears DF_DEFER_INSN_RESCAN >flag, but restores it to the previous state at the end. > >So, I think we either need what I posted (which passed >bootstrap/regtest >on x86_64-linux and i686-linux), or we need to restore TODO_df_finish >for the pass. >Given that the pass previously did call df_analyze () only >conditionally, >not at all in many functions, and had TODO_df_finish unconditionally, >perhaps that needs to work even if it wasn't meant to be used that way.
OK, so I'd prefer we simply unset the flag after processing deferred rescan. I clearly misread the function to do that. Richard. >> >2021-01-29 Jakub Jelinek <ja...@redhat.com> >> > >> > * config/i386/i386-features.c (remove_partial_avx_dependency): >> >Remember >> > whether DF_DEFER_INSN_RESCAN has been active before or not, and >> > reset it to previous state. >> > >> > * gcc.target/i386/20051216-1.c: New test. >> > >> >--- gcc/config/i386/i386-features.c.jj 2021-01-29 20:39:10.561912947 >> >+0100 >> >+++ gcc/config/i386/i386-features.c 2021-01-29 20:59:06.254740315 >+0100 >> >@@ -2273,7 +2273,7 @@ remove_partial_avx_dependency (void) >> > auto_vec<rtx_insn *> control_flow_insns; >> > >> > /* We create invalid RTL initially so defer rescans. */ >> >- df_set_flags (DF_DEFER_INSN_RESCAN); >> >+ int prev_df_flags = df_set_flags (DF_DEFER_INSN_RESCAN); >> > >> > FOR_EACH_BB_FN (bb, cfun) >> > { >> >@@ -2409,6 +2409,8 @@ remove_partial_avx_dependency (void) >> > } >> > >> > df_process_deferred_rescans (); >> >+ if ((prev_df_flags & DF_DEFER_INSN_RESCAN) == 0) >> >+ df_clear_flags (DF_DEFER_INSN_RESCAN); >> > bitmap_obstack_release (NULL); >> > BITMAP_FREE (convert_bbs); >> > >> >--- gcc/testsuite/gcc.target/i386/20051216-1.c.jj 2021-01-29 >> >21:06:20.386960652 +0100 >> >+++ gcc/testsuite/gcc.target/i386/20051216-1.c 2021-01-29 >> >21:03:17.599973093 +0100 >> >@@ -0,0 +1,5 @@ >> >+/* PR rtl-optimization/25432 */ >> >+/* { dg-do compile } */ >> >+/* { dg-options "-O1 -march=cascadelake" } */ >> >+ >> >+#include "../../gcc.c-torture/compile/20051216-1.c" >> > >> > >> > Jakub > > Jakub