aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2011-12-21 14:30:07 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2011-12-21 14:30:07 +0000
commit2091795abd48effcbfe9407b7954021473175b0a (patch)
tree50514e3ffd5c9db38909ffd8f19685233c925f52
parent539fcb458bc5cd2a927626985edf635ba60585de (diff)
downloadgcc-2091795abd48effcbfe9407b7954021473175b0a.zip
gcc-2091795abd48effcbfe9407b7954021473175b0a.tar.gz
gcc-2091795abd48effcbfe9407b7954021473175b0a.tar.bz2
re PR middle-end/51472 (ICE: verify_gimple failed: invalid rhs for gimple memory store with -fgnu-tm --param tm-max-aggregate-size=32)
PR middle-end/51472 * trans-mem.c (tm_log_add): Use create_tmp_var_reg. From-SVN: r182588
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tm/pr51472.c17
-rw-r--r--gcc/trans-mem.c2
3 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7374a6d..c0b6d76 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-12-21 Aldy Hernandez <aldyh@redhat.com>
+
+ PR middle-end/51472
+ * trans-mem.c (tm_log_add): Use create_tmp_var_reg.
+
2011-12-21 Martin Jambor <mjambor@suse.cz>
* tree-into-ssa.c (rewrite_update_stmt): Do not dump extra newlines.
diff --git a/gcc/testsuite/gcc.dg/tm/pr51472.c b/gcc/testsuite/gcc.dg/tm/pr51472.c
new file mode 100644
index 0000000..2897c3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tm/pr51472.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm -O --param tm-max-aggregate-size=32" } */
+
+typedef int __attribute__ ((vector_size (16))) vectype;
+vectype v;
+
+void
+foo (int c)
+{
+ vectype *p = __builtin_malloc (sizeof (vectype));
+ __transaction_atomic
+ {
+ *p = v;
+ if (c)
+ __transaction_cancel;
+ }
+}
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 02f8a18..c0a8b8c 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -1003,7 +1003,7 @@ tm_log_add (basic_block entry_block, tree addr, gimple stmt)
special constructors and the like. */
&& !TREE_ADDRESSABLE (type))
{
- lp->save_var = create_tmp_var (TREE_TYPE (lp->addr), "tm_save");
+ lp->save_var = create_tmp_reg (TREE_TYPE (lp->addr), "tm_save");
add_referenced_var (lp->save_var);
lp->stmts = NULL;
lp->entry_block = entry_block;