From 6aad44556a2d6ad1ec10491944eaf42ee4671b23 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Thu, 21 Feb 2013 20:16:26 +0000 Subject: [PATCH] re PR middle-end/56108 (Asm statement in transaction_relaxed crashes compiler.) PR middle-end/56108 * trans-mem.c (execute_tm_mark): Do not expand transactions that are sure to go irrevocable. testsuite/ * gcc.dg/tm/memopt-1.c: Declare functions transaction_safe. From-SVN: r196213 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tm/memopt-1.c | 4 ++-- gcc/testsuite/gcc.dg/tm/pr56108.c | 9 +++++++++ gcc/trans-mem.c | 19 +++++++++++++++++-- 5 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tm/pr56108.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15286638fe3..343417ce958 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-02-20 Aldy Hernandez + + PR middle-end/56108 + * trans-mem.c (execute_tm_mark): Do not expand transactions that + are sure to go irrevocable. + 2013-02-21 Hans-Peter Nilsson * doc/rtl.texi (vec_concat, vec_duplicate): Mention that diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f0ec270e80..5bffe4317bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-20 Aldy Hernandez + + PR middle-end/56108 + * gcc.dg/tm/memopt-1.c: Declare functions transaction_safe. + 2013-02-21 Martin Jambor PR tree-optimization/56310 diff --git a/gcc/testsuite/gcc.dg/tm/memopt-1.c b/gcc/testsuite/gcc.dg/tm/memopt-1.c index b78a6d417dc..c5ac5ced56c 100644 --- a/gcc/testsuite/gcc.dg/tm/memopt-1.c +++ b/gcc/testsuite/gcc.dg/tm/memopt-1.c @@ -2,8 +2,8 @@ /* { dg-options "-fgnu-tm -O -fdump-tree-tmmemopt" } */ long g, xxx, yyy; -extern george() __attribute__((transaction_callable)); -extern ringo(long int); +extern george() __attribute__((transaction_safe)); +extern ringo(long int) __attribute__((transaction_safe)); int i; f() diff --git a/gcc/testsuite/gcc.dg/tm/pr56108.c b/gcc/testsuite/gcc.dg/tm/pr56108.c new file mode 100644 index 00000000000..81ff574cd47 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr56108.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O" } */ + +int +main() +{ + __transaction_relaxed { __asm__(""); } + return 0; +} diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index dd3918edb1b..71eaa4464e0 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -2859,8 +2859,23 @@ execute_tm_mark (void) // Expand memory operations into calls into the runtime. // This collects log entries as well. FOR_EACH_VEC_ELT (bb_regions, i, r) - if (r != NULL) - expand_block_tm (r, BASIC_BLOCK (i)); + { + if (r != NULL) + { + if (r->transaction_stmt) + { + unsigned sub = gimple_transaction_subcode (r->transaction_stmt); + + /* If we're sure to go irrevocable, there won't be + anything to expand, since the run-time will go + irrevocable right away. */ + if (sub & GTMA_DOES_GO_IRREVOCABLE + && sub & GTMA_MAY_ENTER_IRREVOCABLE) + continue; + } + expand_block_tm (r, BASIC_BLOCK (i)); + } + } bb_regions.release (); -- 2.30.2