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;
@@ -1188,6 +1188,7 @@ tm_log_emit_saves (basic_block entry_blo
 	{
 	  lp->save_var = make_ssa_name (lp->save_var, stmt);
 	  gimple_assign_set_lhs (stmt, lp->save_var);
+	  update_stmt (stmt);
 	}
 
       gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
