https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71437
--- Comment #21 from Jeffrey A. Law <law at gcc dot gnu.org> --- Author: law Date: Thu Mar 16 19:21:33 2017 New Revision: 246208 URL: https://gcc.gnu.org/viewcvs?rev=246208&root=gcc&view=rev Log: PR tree-optimization/71437 * tree-ssa-dom.c (dom_opt_dom_walker): Remove thread_across_edge member function. Implementation moved into after_dom_children member function and into the threader's thread_outgoing_edges function. (dom_opt_dom_walker::after_dom_children): Simplify by moving some code into new thread_outgoing_edges. * tree-ssa-threadedge.c (thread_across_edge): Make static and simplify definition. Simplify marker handling (do it here). Assume we always have the available expression and the const/copies tables. (thread_outgoing_edges): New function extracted from tree-ssa-dom.c and tree-vrp.c * tree-ssa-threadedge.h (thread_outgoing_edges): Declare. * tree-vrp.c (equiv_stack): No longer file scoped. (vrp_dom_walker): New class. (vrp_dom_walker::before_dom_children): New member function. (vrp_dom_walker::after_dom_children): Likewise. (identify_jump_threads): Setup domwalker. Use it rather than walking edges in a random order by hand. Simplify setup/finalization. (finalize_jump_threads): Remove. (vrp_finalize): Do not call identify_jump_threads here. (execute_vrp): Do it here instead and call thread_through_all_blocks here too. Modified: trunk/gcc/ChangeLog trunk/gcc/tree-ssa-dom.c trunk/gcc/tree-ssa-threadedge.c trunk/gcc/tree-ssa-threadedge.h trunk/gcc/tree-vrp.c