On Sat, Nov 9, 2019 at 3:26 PM Giuliano Belinassi <giuliano.belina...@usp.br> wrote: > > Hi all, > > This patch refactors tree-loop-distribution.c for thread safety without > use of C11 __thread feature. All global variables were moved to a struct > which is initialized at ::execute time.
Thanks for working on this. I've been thinking on how to make this nicer which naturally leads to the use of C++ classes and member functions which get 'this' for free. This means all functions that make use of 'priv' in your patch would need to become member functions of the class and pass_loop_distribution::execute would wrap it like unsigned int pass_loop_distribution::execute (function *fun) { return priv_pass_vars().execute (fun); } please find a better name for 'priv_pass_vars' since you can't reuse that name for other passes due to C++ ODR rules. I would suggest 'loop_distribution'. Can you try if going this route works well? Thanks, Richard. > I can install this patch myself in trunk if it's OK. > > gcc/ChangeLog > 2019-11-09 Giuliano Belinassi <giuliano.belina...@usp.br> > > * cfgloop.c (get_loop_body_in_custom_order): New. > * cfgloop.h (get_loop_body_in_custom_order): New prototype. > * tree-loop-distribution.c (struct priv_pass_vars): New. > (bb_top_order_cmp_r): New. > (create_rdg_vertices): Update prototype. > (stmts_from_loop): Same as above. > (update_for_merge): Same as above. > (partition_merge_into): Same as above. > (get_data_dependence): Same as above. > (data_dep_in_cycle_p): Same as above. > (update_type_for_merge): Same as above. > (build_rdg_partition_for-vertex): Same as above. > (classify_builtin_ldst): Same as above. > (classify_partition): Same as above. > (share_memory_accesses): Same as above. > (rdg_build_partitions): Same as above. > (pg_add_dependence_edges): Same as above. > (build_partition_graph): Same as above. > (merge_dep_scc_partitions): Same as above. > (break_alias_scc_partitions): Same as above. > (finalize_partitions): Same as above. > (distribute_loop): Same as above. > (bb_top_order_init): New function. > (bb_top_order_destroy): New function. > (pass_loop_distribution::execute): Initialize struct priv. > > Thank you, > Giuliano.