On 12/21/11 08:07, Jakub Jelinek wrote:
On Wed, Dec 21, 2011 at 07:52:16AM -0600, Aldy Hernandez wrote:
Oh neat... create_tmp_reg will do all this for me.

I don't think that update_stmt is needed there.
The stmt is freshly allocated a few lines above it:
        stmt = gimple_build_assign (lp->save_var, unshare_expr (lp->addr));
so the modified flag is still set and thus when you gsi_insert_before
it afterwards, it will update_stmt_if_modified, which is the same as
update_stmt when the modified flag is set.

Ok, done.


The first hunk looks okay.

Was that an approval?  Updated patch attached.
        PR middle-end/51472
        * trans-mem.c (tm_log_add): Use create_tmp_var_reg.

Index: testsuite/gcc.dg/tm/pr51472.c
===================================================================
--- testsuite/gcc.dg/tm/pr51472.c       (revision 0)
+++ testsuite/gcc.dg/tm/pr51472.c       (revision 0)
@@ -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;
+  }
+}
Index: trans-mem.c
===================================================================
--- trans-mem.c (revision 182542)
+++ trans-mem.c (working copy)
@@ -1003,7 +1003,7 @@ tm_log_add (basic_block entry_block, tre
             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;

Reply via email to