diff mbox

PR78879

Message ID 327336c5.30f56.1592524b634.Coremail.ypf@pku.edu.cn
State New
Headers show

Commit Message

Yuan, Pengfei Dec. 22, 2016, 6:08 a.m. UTC
Hi,

The following patch fixes
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78879

There are some other invocations of unordered_remove in
tree-ssa-threadupdate.c, which may also need to be replaced
with ordered_remove.

Regards,
Yuan, Pengfei


2016-12-22  Yuan Pengfei  <ypf@pku.edu.cn>

	PR middle-end/78879
	* tree-ssa-threadupdate.c (mark_threaded_blocks): Replace
	unordered_remove with ordered_remove.

Comments

Jeff Law Dec. 22, 2016, 4:51 p.m. UTC | #1
On 12/21/2016 11:08 PM, Yuan, Pengfei wrote:
> Hi,
>
> The following patch fixes
>   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78879
>
> There are some other invocations of unordered_remove in
> tree-ssa-threadupdate.c, which may also need to be replaced
> with ordered_remove.
>
> Regards,
> Yuan, Pengfei
>
>
> 2016-12-22  Yuan Pengfei  <ypf@pku.edu.cn>
>
> 	PR middle-end/78879
> 	* tree-ssa-threadupdate.c (mark_threaded_blocks): Replace
> 	unordered_remove with ordered_remove.
How specifically does this fix the problem.  I suspect you're just 
papering over the bug by changing the order of thread processing.

You'll note that when a thread is canceled we call the 
paths.unordered_remove without incrementing i.  AFAICT you're just 
changing order in which paths out of the array.


Jeff
Yuan, Pengfei Dec. 23, 2016, 7:49 a.m. UTC | #2
> How specifically does this fix the problem.  I suspect you're just 
> papering over the bug by changing the order of thread processing.
> 
> You'll note that when a thread is canceled we call the 
> paths.unordered_remove without incrementing i.  AFAICT you're just 
> changing order in which paths out of the array.
> 
> 
> Jeff

Please check my explanation in
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78879#c11

Thanks!

Yuan, Pengfei
diff mbox

Patch

diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c
index 5a5f8df..b2e6d7a 100644
--- a/gcc/tree-ssa-threadupdate.c
+++ b/gcc/tree-ssa-threadupdate.c
@@ -2144,7 +2144,7 @@  mark_threaded_blocks (bitmap threaded_blocks)
 	    }
 	  else
 	    {
-	      paths.unordered_remove (i);
+	      paths.ordered_remove (i);
 	      if (dump_file && (dump_flags & TDF_DETAILS))
 		dump_jump_thread_path (dump_file, *path, false);
 	      delete_jump_thread_path (path);
@@ -2180,7 +2180,7 @@  mark_threaded_blocks (bitmap threaded_blocks)
 	  else
 	    {
 	      e->aux = NULL;
-	      paths.unordered_remove (i);
+	      paths.ordered_remove (i);
 	      if (dump_file && (dump_flags & TDF_DETAILS))
 		dump_jump_thread_path (dump_file, *path, false);
 	      delete_jump_thread_path (path);