https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83362
--- Comment #4 from Jeffrey A. Law <law at gcc dot gnu.org> --- Author: law Date: Tue Dec 12 22:46:46 2017 New Revision: 255593 URL: https://gcc.gnu.org/viewcvs?rev=255593&root=gcc&view=rev Log: PR tree-optimization/83298 PR tree-optimization/83362 PR tree-optimization/83383 * gimple-ssa-evrp-analyze.h (class evrp_range_analyzer): Make push_value_range a public interface. Add new argument to record_ranges_from_stmt. * gimple-ssa-evrp-analyze.c (evrp_range_analyzer::record_ranges_from_stmt): Add new argument. Update comments. Handle recording temporary equivalences. * tree-ssa-dom.c (dom_opt_opt_walker::before_dom_children): Add new argument to call to evrp_range_analyzer::record_ranges_from_stmt. * gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children): Likewise. * tree-ssa-threadedge.c: Include alloc-pool.h, vr-values.h and gimple-ssa-evrp-analyze.h. (record_temporary_equivalences_from_phis): Add new argument. When the PHI arg is an SSA_NAME, set the result's range to the range of the PHI arg. (record_temporary_equivalences_from_stmts_at_dest): Record ranges from statements too. (thread_through_normal_block): Accept new argument, evrp_range_analyzer. Pass it down to children as needed. (thread_outgoing_edges): Likewise. (thread_across_edge): Likewise. Push/pop range state as needed. * tree-ssa-threadedge.h (thread_outgoing_edges): Update prototype. PR tree-optimization/83298 PR tree-optimization/83362 PR tree-optimization/83383 * gcc.c-torture/execute/pr83298.c: New test. * gcc.c-torture/execute/pr83362.c New test. * gcc.c-torture/execute/pr83383.c New test. Added: trunk/gcc/testsuite/gcc.c-torture/execute/pr83298.c trunk/gcc/testsuite/gcc.c-torture/execute/pr83362.c trunk/gcc/testsuite/gcc.c-torture/execute/pr83383.c Modified: trunk/gcc/ChangeLog trunk/gcc/gimple-ssa-evrp-analyze.c trunk/gcc/gimple-ssa-evrp-analyze.h trunk/gcc/gimple-ssa-evrp.c trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-dom.c trunk/gcc/tree-ssa-threadedge.c trunk/gcc/tree-ssa-threadedge.h trunk/gcc/tree-vrp.c