aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadbackward.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-09-05 09:41:50 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-09-05 11:46:22 +0200
commitcbeeadff4c041c09a6335105d596019b6d583880 (patch)
treea49eff0daaa1750081150b70b8d6d364e4846d0c /gcc/tree-ssa-threadbackward.c
parentb27416a7a91b7e6b6b018411ac85cad556ff9903 (diff)
downloadgcc-cbeeadff4c041c09a6335105d596019b6d583880.zip
gcc-cbeeadff4c041c09a6335105d596019b6d583880.tar.gz
gcc-cbeeadff4c041c09a6335105d596019b6d583880.tar.bz2
Clean up registering of paths in backwards threader.
All callers to maybe_register_path() call find_taken_edge() beforehand and pass the edge as an argument. There's no reason to repeat this at each call site. This is a clean-up in preparation for some other enhancements to the backwards threader. Tested on x86-64 Linux. gcc/ChangeLog: * tree-ssa-threadbackward.c (back_threader::maybe_register_path): Remove argument and call find_taken_edge. (back_threader::resolve_phi): Do not calculate taken edge before calling maybe_register_path. (back_threader::find_paths_to_names): Same.
Diffstat (limited to 'gcc/tree-ssa-threadbackward.c')
-rw-r--r--gcc/tree-ssa-threadbackward.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/gcc/tree-ssa-threadbackward.c b/gcc/tree-ssa-threadbackward.c
index 2fa22f8..6827d00 100644
--- a/gcc/tree-ssa-threadbackward.c
+++ b/gcc/tree-ssa-threadbackward.c
@@ -83,7 +83,7 @@ public:
bool thread_through_all_blocks (bool may_peel_loop_headers);
private:
void find_paths (basic_block bb, tree name);
- void maybe_register_path (edge taken_edge);
+ edge maybe_register_path ();
bool find_paths_to_names (basic_block bb, bitmap imports);
bool resolve_def (tree name, bitmap interesting, vec<tree> &worklist);
bool resolve_phi (gphi *phi, bitmap imports);
@@ -134,22 +134,31 @@ back_threader::~back_threader ()
}
// Register the current path for jump threading if it's profitable to
-// do so. TAKEN_EDGE is the known edge out of the path.
+// do so.
+//
+// Return the known taken edge out of the path, even if the path was
+// not registered, or NULL if the taken edge could not be determined.
-void
-back_threader::maybe_register_path (edge taken_edge)
+edge
+back_threader::maybe_register_path ()
{
- bool irreducible = false;
- bool profitable
- = m_profit.profitable_path_p (m_path, m_name, taken_edge, &irreducible);
+ edge taken_edge = find_taken_edge (m_path);
- if (profitable)
+ if (taken_edge && taken_edge != UNREACHABLE_EDGE)
{
- m_registry.register_path (m_path, taken_edge);
+ bool irreducible = false;
+ bool profitable
+ = m_profit.profitable_path_p (m_path, m_name, taken_edge, &irreducible);
+
+ if (profitable)
+ {
+ m_registry.register_path (m_path, taken_edge);
- if (irreducible)
- vect_free_loop_info_assumptions (m_path[0]->loop_father);
+ if (irreducible)
+ vect_free_loop_info_assumptions (m_path[0]->loop_father);
+ }
}
+ return taken_edge;
}
// Return the known taken edge out of a path. If the path can be
@@ -295,12 +304,9 @@ back_threader::resolve_phi (gphi *phi, bitmap interesting)
else if (TREE_CODE (arg) == INTEGER_CST)
{
m_path.safe_push (e->src);
- edge taken_edge = find_taken_edge (m_path);
+ edge taken_edge = maybe_register_path ();
if (taken_edge && taken_edge != UNREACHABLE_EDGE)
- {
- maybe_register_path (taken_edge);
- done = true;
- }
+ done = true;
m_path.pop ();
}
}
@@ -388,12 +394,8 @@ back_threader::find_paths_to_names (basic_block bb, bitmap interesting)
|| bitmap_bit_p (m_ranger.gori ().exports (bb), i))
&& m_path.length () > 1)
{
- edge taken_edge = find_taken_edge (m_path);
- if (taken_edge)
+ if (maybe_register_path ())
{
- if (taken_edge != UNREACHABLE_EDGE)
- maybe_register_path (taken_edge);
-
done = true;
goto leave_bb;
}