aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/i386/i386-features.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
index ef4f940..c845ba9 100644
--- a/gcc/config/i386/i386-features.c
+++ b/gcc/config/i386/i386-features.c
@@ -2272,6 +2272,9 @@ 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);
+
FOR_EACH_BB_FN (bb, cfun)
{
FOR_BB_INSNS (bb, insn)
@@ -2292,14 +2295,7 @@ remove_partial_avx_dependency (void)
continue;
if (!v4sf_const0)
- {
- calculate_dominance_info (CDI_DOMINATORS);
- df_set_flags (DF_DEFER_INSN_RESCAN);
- df_chain_add_problem (DF_DU_CHAIN | DF_UD_CHAIN);
- df_md_add_problem ();
- df_analyze ();
- v4sf_const0 = gen_reg_rtx (V4SFmode);
- }
+ v4sf_const0 = gen_reg_rtx (V4SFmode);
/* Convert PARTIAL_XMM_UPDATE_TRUE insns, DF -> SF, SF -> DF,
SI -> SF, SI -> DF, DI -> SF, DI -> DF, to vec_dup and
@@ -2360,6 +2356,7 @@ remove_partial_avx_dependency (void)
{
/* (Re-)discover loops so that bb->loop_father can be used in the
analysis below. */
+ calculate_dominance_info (CDI_DOMINATORS);
loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
/* Generate a vxorps at entry of the nearest dominator for basic
@@ -2391,7 +2388,6 @@ remove_partial_avx_dependency (void)
set_insn = emit_insn_after (set,
insn ? PREV_INSN (insn) : BB_END (bb));
df_insn_rescan (set_insn);
- df_process_deferred_rescans ();
loop_optimizer_finalize ();
if (!control_flow_insns.is_empty ())
@@ -2412,6 +2408,7 @@ remove_partial_avx_dependency (void)
}
}
+ df_process_deferred_rescans ();
bitmap_obstack_release (NULL);
BITMAP_FREE (convert_bbs);
@@ -2441,7 +2438,7 @@ const pass_data pass_data_remove_partial_avx_dependency =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_df_finish, /* todo_flags_finish */
+ 0, /* todo_flags_finish */
};
class pass_remove_partial_avx_dependency : public rtl_opt_pass