mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 22:55:38 +08:00
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 (expand_assign_tm): Handle TM_MEMMOVE loads correctly. testsuite/ PR middle-end/51472 * gcc.dg/tm/memopt-6.c: Adjust regexp. From-SVN: r182908
This commit is contained in:
parent
76f5732818
commit
713b8dfb75
@ -74,6 +74,11 @@
|
||||
(ia64-hp-*vms*): Remove.
|
||||
* config/vms/xm-vms64.h: Delete.
|
||||
|
||||
2012-01-04 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
PR middle-end/51472
|
||||
* trans-mem.c (expand_assign_tm): Handle TM_MEMMOVE loads correctly.
|
||||
|
||||
2012-01-04 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* opts.c (finish_options): Remove duplicate sorry.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-01-05 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
PR middle-end/51472
|
||||
* gcc.dg/tm/memopt-6.c: Adjust regexp.
|
||||
|
||||
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR lto/41576
|
||||
|
@ -17,5 +17,5 @@ int f()
|
||||
return lala.x[i];
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "memmoveRtWt \\\(&lala, &lacopy" 1 "tmedge" } } */
|
||||
/* { dg-final { scan-tree-dump-times "memmoveRtWt \\\(.*, &lacopy" 1 "tmedge" } } */
|
||||
/* { dg-final { cleanup-tree-dump "tmedge" } } */
|
||||
|
@ -2174,7 +2174,7 @@ expand_assign_tm (struct tm_region *region, gimple_stmt_iterator *gsi)
|
||||
}
|
||||
if (!gcall)
|
||||
{
|
||||
tree lhs_addr, rhs_addr;
|
||||
tree lhs_addr, rhs_addr, tmp;
|
||||
|
||||
if (load_p)
|
||||
transaction_subcode_ior (region, GTMA_HAVE_LOAD);
|
||||
@ -2183,13 +2183,29 @@ expand_assign_tm (struct tm_region *region, gimple_stmt_iterator *gsi)
|
||||
|
||||
/* ??? Figure out if there's any possible overlap between the LHS
|
||||
and the RHS and if not, use MEMCPY. */
|
||||
lhs_addr = gimplify_addr (gsi, lhs);
|
||||
|
||||
if (load_p && is_gimple_non_addressable (lhs))
|
||||
{
|
||||
tmp = create_tmp_var (TREE_TYPE (lhs), NULL);
|
||||
lhs_addr = build_fold_addr_expr (tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = NULL_TREE;
|
||||
lhs_addr = gimplify_addr (gsi, lhs);
|
||||
}
|
||||
rhs_addr = gimplify_addr (gsi, rhs);
|
||||
gcall = gimple_build_call (builtin_decl_explicit (BUILT_IN_TM_MEMMOVE),
|
||||
3, lhs_addr, rhs_addr,
|
||||
TYPE_SIZE_UNIT (TREE_TYPE (lhs)));
|
||||
gimple_set_location (gcall, loc);
|
||||
gsi_insert_before (gsi, gcall, GSI_SAME_STMT);
|
||||
|
||||
if (tmp)
|
||||
{
|
||||
gcall = gimple_build_assign (lhs, tmp);
|
||||
gsi_insert_before (gsi, gcall, GSI_SAME_STMT);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now that we have the load/store in its instrumented form, add
|
||||
|
Loading…
Reference in New Issue
Block a user