]> git.ipfire.org Git - thirdparty/gcc.git/commit
Use EDGE_EXECUTABLE in ranger and return UNDEFINED for those edges.
authorAndrew MacLeod <amacleod@redhat.com>
Tue, 24 Aug 2021 16:13:24 +0000 (12:13 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Mon, 20 Sep 2021 20:32:35 +0000 (16:32 -0400)
commit73cf73af2392e00917de042a4692f6a0b6329ee8
tree6cd6cfb9b9569ddf87064cc4563655b74efd3135
parent5d110fe90afcd850ea21aee6429f22edd6b1b592
Use EDGE_EXECUTABLE in ranger and return UNDEFINED for those edges.

If an incoming edge is UNDEFINED, don't process it.  Track if other edges
equate to a single value, and add an equivalence if appropriate.

gcc/
* gimple-range-fold.cc (fold_using_range::range_of_phi): Ignore
undefined edges, apply an equivalence if appropriate.
* gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Return
UNDEFINED if EDGE_EXECUTABLE is not set.
* gimple-range.cc (gimple_ranger::gimple_ranger): Set all edges
as EXECUTABLE upon startup.
(gimple_ranger::range_on_edge): Return UNDEFINED for edges without
EDGE_EXECUTABLE set.
* vr-values.c (set_and_propagate_unexecutable): New.
(simplify_using_ranges::fold_cond): Call set_and_propagate.
(simplify_using_ranges::simplify_switch_using_ranges): Ditto.
* vr-values.h: Add prototype.

gcc/testsuite/
* gcc.dg/tree-ssa/evrp-ignore.c: New.
gcc/gimple-range-fold.cc
gcc/gimple-range-gori.cc
gcc/gimple-range.cc
gcc/testsuite/gcc.dg/tree-ssa/evrp-ignore.c [new file with mode: 0644]
gcc/vr-values.c
gcc/vr-values.h