diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2013-02-21 20:16:26 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2013-02-21 20:16:26 +0000 |
commit | 6aad44556a2d6ad1ec10491944eaf42ee4671b23 (patch) | |
tree | e2aef86ce90ad55c79e619525105d95f17193c00 /gcc | |
parent | 304886c59c0521ff1c6bfc798181a6b0a17e9368 (diff) | |
download | gcc-6aad44556a2d6ad1ec10491944eaf42ee4671b23.zip gcc-6aad44556a2d6ad1ec10491944eaf42ee4671b23.tar.gz gcc-6aad44556a2d6ad1ec10491944eaf42ee4671b23.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr56108.c | 9 | ||||
-rw-r--r-- | gcc/trans-mem.c | 19 |
5 files changed, 39 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1528663..343417c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-02-20 Aldy Hernandez <aldyh@redhat.com> + + 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 <hp@axis.com> * doc/rtl.texi (vec_concat, vec_duplicate): Mention that diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f0ec27..5bffe43 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-20 Aldy Hernandez <aldyh@redhat.com> + + PR middle-end/56108 + * gcc.dg/tm/memopt-1.c: Declare functions transaction_safe. + 2013-02-21 Martin Jambor <mjambor@suse.cz> 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 b78a6d4..c5ac5ce 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 0000000..81ff574 --- /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 dd3918e..71eaa44 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 (); |