[Bug middle-end/46923] New: [trans-mem] thread-local memory variable not properly logged
rth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 13 15:29:00 GMT 2010
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46923
Summary: [trans-mem] thread-local memory variable not properly
logged
Product: gcc
Version: trans-mem
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: rth@gcc.gnu.org
extern void baz(int);
int y;
void foo(volatile int x)
{
__transaction {
x += y;
y++;
}
baz(x);
}
Ignore the fact that volatile is not really compatible with
transactional memory; it is used here only to force the
compiler to put X into memory without having to generate a
much more complex test case.
It currently compiles to
call _ITM_beginTransaction
movl 12(%rsp), %ebx
movl $y, %edi
call _ITM_RfWU4
leal 1(%rax), %esi
movl $y, %edi
leal (%rax,%rbx), %ebx
movl %ebx, 12(%rsp)
call _ITM_WaWU4
call _ITM_commitTransaction
Note that X, at %rbp+12, is written back to memory and is
not logged. If the either the write or commit functions
have to restart the transaction, we will produce the wrong
answer.
More information about the Gcc-bugs
mailing list