summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-08 16:24:06 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-08 16:24:06 +0000
commit6d1fdbf9b759710b1481615875f7989f5513d265 (patch)
tree22495c8c04488309899cb5498c2ee0b571944d2c
parent4c849ae757d2513f1c5d3600159d76b743aeed06 (diff)
downloadgcc-6d1fdbf9b759710b1481615875f7989f5513d265.tar.gz
* tree-ssa-threadupdate.h (delete_thread_path): Declare.
* tree-ssa-threadupdate.c (delete_thread_path): New function. (ssa_redirect_edges, thread_block_1): Use it. (thread_through_loop_header, mark_threaded_blocks): Likewise. (thread_through_all_blocks, register_jump_thread): Likewise. * tree-ssa-threadedge.c (thread_across_edge): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204579 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/tree-ssa-threadedge.c4
-rw-r--r--gcc/tree-ssa-threadupdate.c51
-rw-r--r--gcc/tree-ssa-threadupdate.h1
4 files changed, 32 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a854b0165c..9ba77dbcbe5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2013-11-08 Jeff Law <law@redhat.com>
+
+ * tree-ssa-threadupdate.h (delete_thread_path): Declare.
+ * tree-ssa-threadupdate.c (delete_thread_path): New function.
+ (ssa_redirect_edges, thread_block_1): Use it.
+ (thread_through_loop_header, mark_threaded_blocks): Likewise.
+ (thread_through_all_blocks, register_jump_thread): Likewise.
+ * tree-ssa-threadedge.c (thread_across_edge): Likewise.
+
2013-11-08 James Greenhalgh <james.greenhalgh@arm.com>
* config/arm/aarch-common.c
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index 4cff16d6846..cd2b34ae6ff 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -1086,9 +1086,7 @@ thread_across_edge (gimple dummy_cond,
}
else
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release();
+ delete_jump_thread_path (path);
}
}
BITMAP_FREE (visited);
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c
index 10271919786..24e7767c3b7 100644
--- a/gcc/tree-ssa-threadupdate.c
+++ b/gcc/tree-ssa-threadupdate.c
@@ -555,9 +555,7 @@ ssa_redirect_edges (struct redirection_data **slot,
/* Go ahead and clear E->aux. It's not needed anymore and failure
to clear it will cause all kinds of unpleasant problems later. */
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
@@ -703,9 +701,7 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners)
/* Since this case is not handled by our special code
to thread through a loop header, we must explicitly
cancel the threading request here. */
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
continue;
}
@@ -1161,9 +1157,7 @@ thread_through_loop_header (struct loop *loop, bool may_peel_loop_headers)
if (e->src->loop_father != e2->dest->loop_father
&& e2->dest != loop->header)
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
}
@@ -1213,9 +1207,7 @@ fail:
if (path)
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
}
@@ -1310,9 +1302,7 @@ mark_threaded_blocks (bitmap threaded_blocks)
if (e2 && !phi_args_equal_on_edges (e2, final_edge))
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
}
@@ -1336,9 +1326,7 @@ mark_threaded_blocks (bitmap threaded_blocks)
if (e->aux)
{
vec<jump_thread_edge *> *path = THREAD_PATH (e);
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
}
@@ -1395,9 +1383,7 @@ mark_threaded_blocks (bitmap threaded_blocks)
|| (path->last ()->type
== EDGE_COPY_SRC_JOINER_BLOCK))
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
break;
@@ -1498,9 +1484,7 @@ thread_through_all_blocks (bool may_peel_loop_headers)
{
vec<jump_thread_edge *> *path = THREAD_PATH (e);
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
e->aux = NULL;
}
}
@@ -1520,6 +1504,17 @@ thread_through_all_blocks (bool may_peel_loop_headers)
return retval;
}
+/* Delete the jump threading path PATH. We have to explcitly delete
+ each entry in the vector, then the container. */
+
+void
+delete_jump_thread_path (vec<jump_thread_edge *> *path)
+{
+ for (unsigned int i = 0; i < path->length (); i++)
+ delete (*path)[i];
+ path->release();
+}
+
/* Dump a jump threading path, including annotations about each
edge in the path. */
@@ -1565,9 +1560,7 @@ register_jump_thread (vec<jump_thread_edge *> *path)
{
if (!dbg_cnt (registered_jump_thread))
{
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
return;
}
@@ -1583,9 +1576,7 @@ register_jump_thread (vec<jump_thread_edge *> *path)
dump_jump_thread_path (dump_file, *path);
}
- for (unsigned int i = 0; i < path->length (); i++)
- delete (*path)[i];
- path->release ();
+ delete_jump_thread_path (path);
return;
}
diff --git a/gcc/tree-ssa-threadupdate.h b/gcc/tree-ssa-threadupdate.h
index f84c02e9b3c..4617b9c1d3e 100644
--- a/gcc/tree-ssa-threadupdate.h
+++ b/gcc/tree-ssa-threadupdate.h
@@ -42,4 +42,5 @@ public:
};
extern void register_jump_thread (vec <class jump_thread_edge *> *);
+extern void delete_jump_thread_path (vec <class jump_thread_edge *> *);
#endif