Occured to me when looking into PR81028. Bootstrap and regtest running on x86_64-unknown-linux-gnu.
Richard. 2017-06-09 Richard Biener <rguent...@suse.de> * tree-ssa-loop-im.c (execute_sm): Do not force multi-threaded model if the ref is always written to. Index: gcc/tree-ssa-loop-im.c =================================================================== --- gcc/tree-ssa-loop-im.c (revision 249053) +++ gcc/tree-ssa-loop-im.c (working copy) @@ -198,6 +198,7 @@ static bitmap_obstack lim_bitmap_obstack static obstack mem_ref_obstack; static bool ref_indep_loop_p (struct loop *, im_mem_ref *, struct loop *); +static bool ref_always_accessed_p (struct loop *, im_mem_ref *, bool); /* Minimum cost of an expensive expression. */ #define LIM_EXPENSIVE ((unsigned) PARAM_VALUE (PARAM_LIM_EXPENSIVE)) @@ -2025,7 +2026,8 @@ execute_sm (struct loop *loop, vec<edge> for_each_index (&ref->mem.ref, force_move_till, &fmt_data); if (bb_in_transaction (loop_preheader_edge (loop)->src) - || !PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES)) + || (! PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES) + && ! ref_always_accessed_p (loop, ref, true))) multi_threaded_model_p = true; if (multi_threaded_model_p)