aboutsummaryrefslogtreecommitdiff
path: root/gcc/trans-mem.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-06-04 16:51:24 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-06-04 16:51:24 +0000
commit764ce4f20a98a9579c7c972955fd2aa1f245b455 (patch)
tree227fc61acb843d8ba0a7ed57f7251484fbfc265c /gcc/trans-mem.c
parentbe6b029b8cdf4c17a9f040332b8345f0fa13ed43 (diff)
downloadgcc-764ce4f20a98a9579c7c972955fd2aa1f245b455.zip
gcc-764ce4f20a98a9579c7c972955fd2aa1f245b455.tar.gz
gcc-764ce4f20a98a9579c7c972955fd2aa1f245b455.tar.bz2
re PR middle-end/47530 ([trans-mem] tail call optimization problem with _ITM_commitTransaction)
PR middle-end/47530 * trans-mem.c (expand_block_edges): Do not skip the first statement when resetting the BB. From-SVN: r188190
Diffstat (limited to 'gcc/trans-mem.c')
-rw-r--r--gcc/trans-mem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 7026823..5aae8b2 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -2591,6 +2591,7 @@ expand_block_edges (struct tm_region *region, basic_block bb)
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
{
+ bool do_next = true;
gimple stmt = gsi_stmt (gsi);
/* ??? TM_COMMIT (and any other tm builtin function) in a nested
@@ -2612,6 +2613,7 @@ expand_block_edges (struct tm_region *region, basic_block bb)
make_tm_edge (stmt, bb, region);
bb = e->dest;
gsi = gsi_start_bb (bb);
+ do_next = false;
}
/* Delete any tail-call annotation that may have been added.
@@ -2620,7 +2622,8 @@ expand_block_edges (struct tm_region *region, basic_block bb)
gimple_call_set_tail (stmt, false);
}
- gsi_next (&gsi);
+ if (do_next)
+ gsi_next (&gsi);
}
}