diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2021-09-03 12:02:30 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2021-09-03 15:47:34 +0200 |
commit | 2fcfc03459a907c0237ea6e2c6e4ce4871034bed (patch) | |
tree | cfdf37269e8d1cb5bac82af087883f3ff71a6cca /gcc/tree-ssa-threadedge.c | |
parent | b237eb9dfdada49d3f2bdfa98aa4a0b67fc1829d (diff) | |
download | gcc-2fcfc03459a907c0237ea6e2c6e4ce4871034bed.zip gcc-2fcfc03459a907c0237ea6e2c6e4ce4871034bed.tar.gz gcc-2fcfc03459a907c0237ea6e2c6e4ce4871034bed.tar.bz2 |
Avoid using unavailable objects in jt_state.
The jump threading state is about to get more interesting, and it may
get with a ranger or with the const_copies/etc helpers. This patch
makes sure we have an object before we attempt to call push_marker or
pop_to_marker.
Tested on x86-64 Linux.
gcc/ChangeLog:
* tree-ssa-threadedge.c (jt_state::push): Only call methods for
which objects are available.
(jt_state::pop): Same.
(jt_state::register_equiv): Same.
(jt_state::register_equivs_on_edge): Same.
Diffstat (limited to 'gcc/tree-ssa-threadedge.c')
-rw-r--r-- | gcc/tree-ssa-threadedge.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c index 8a48512..e57f6d3 100644 --- a/gcc/tree-ssa-threadedge.c +++ b/gcc/tree-ssa-threadedge.c @@ -1323,8 +1323,10 @@ jt_state::jt_state (const_and_copies *copies, void jt_state::push (edge) { - m_copies->push_marker (); - m_exprs->push_marker (); + if (m_copies) + m_copies->push_marker (); + if (m_exprs) + m_exprs->push_marker (); if (m_evrp) m_evrp->push_marker (); } @@ -1334,8 +1336,10 @@ jt_state::push (edge) void jt_state::pop () { - m_copies->pop_to_marker (); - m_exprs->pop_to_marker (); + if (m_copies) + m_copies->pop_to_marker (); + if (m_exprs) + m_exprs->pop_to_marker (); if (m_evrp) m_evrp->pop_to_marker (); } @@ -1346,7 +1350,8 @@ jt_state::pop () void jt_state::register_equiv (tree dst, tree src, bool update_range) { - m_copies->record_const_or_copy (dst, src); + if (m_copies) + m_copies->record_const_or_copy (dst, src); /* If requested, update the value range associated with DST, using the range from SRC. */ @@ -1396,7 +1401,8 @@ jt_state::record_ranges_from_stmt (gimple *stmt, bool temporary) void jt_state::register_equivs_on_edge (edge e) { - record_temporary_equivalences (e, m_copies, m_exprs); + if (m_copies && m_exprs) + record_temporary_equivalences (e, m_copies, m_exprs); } jump_threader_simplifier::jump_threader_simplifier (vr_values *v) |