aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2013-02-21 20:16:26 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2013-02-21 20:16:26 +0000
commit6aad44556a2d6ad1ec10491944eaf42ee4671b23 (patch)
treee2aef86ce90ad55c79e619525105d95f17193c00 /gcc
parent304886c59c0521ff1c6bfc798181a6b0a17e9368 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tm/memopt-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/tm/pr56108.c9
-rw-r--r--gcc/trans-mem.c19
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 ();