On Thu, 2011-12-15 at 10:51 -0500, Patrick Marlier wrote: > Here a list of known bugs for trans-mem. I have tried to sort it by > priority (highest first).
Thanks for this list! Items that I would add: * Publication safety could potentially be violated. We suspect this can happen when loads are moved to before other loads that the former depend on (e.g., "if(foo) x = bar;" could become "xtemp=bar; if (foo) x = xtemp;"; however, swapping loads inside of a BB would be fine). However, we don't have a test case for this yet. Aldy/Andrew suggested looking at some of the tests in gcc/testsuite/gcc.dg/simulate-thread/, which they used for the atomic work. If you have time to look for a test case, this would be great. * I have a test that shows that the compiler doesn't yet check that txn_safe etc are part of the type (so, you can assign the value of txn_unsafe function pointer to a txn_safe one). Will create a PR for this. Lower priority, I'd say. Just performance related, so lower priority: * I need to port LSA to a libitm TM method (multiple locks, write-through, time-based). With just global-lock / write-through as of now, we won't win any performance prizes... * We currently go irrevocable very early, whereas it would be better if we'd waited for as long as possible. I thought I had seen cases where this was happening even if it wasn't sure that we would actually have to go irrevocable, but I don't remember which test / program this was with. > > * Stack save/restore not working? -> XFAIL testcases > Related to this: > ICE: verify_gimple failed: invalid rhs for gimple memory store with > -fgnu-tm --param tm-max-aggregate-size=32 > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51472 > [trans-mem] save/restore of thread-local data in nested txns is missing > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49581 > Stack slots don't get restored in Genome currently. Setting the returns-twice flag on ITM_beginTransaction fixes this for Genome, but we need to check that this will always work. Richard is also looking at whether we can fix the back edges (they broke / got lost, which causes stack restore to be missing). > * Caller-save happens on _ITM_beginTransaction > ([trans-mem] Segfault in libitm when compiling with -O2) > -> Fix proposed but probably not optimal. > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48625 > > * [trans-mem] problem with TM clone aliases > Leads to add _ITM_getTMCloneOrIrrevocable in a __transaction_atomic. > -> Fix proposed. > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51516 > > * ICE: in function_and_variable_visibility, at ipa.c:835 with -O > -fgnu-tm and overriding virtual transaction_safe function > -> Fix proposed. > http://gcc.gnu.org/ml/gcc-patches/2011-12/msg01182.html > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51411 > > * ICE: verify_flow_info failed: BB 3 can not throw but has an EH edge > with -fgnu-tm -fnon-call-exceptions and transaction_callable > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51212 > > * ICE when lto1 does not have -fgnu-tm and object file uses TM > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51280 > > * AIX unexpected error_mark node in new TM tests > -> Probably already fixed? > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51174 > > Probably should be closed: > * libitm failures > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51124 > > * infinite loop when compiling > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48075 I think I checked that a while ago, and it was still looping. But as someone on the PR pointed out, this is ICE on illegal code, so less important. > > Fixed but still open: > * ICE: vector VEC(inline_summary_t,base) index domain error, in > inline_summary at ipa-inline.h:193 with -O -fgnu-tm, transaction_safe > and overloaded contructor > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51273 > > * ICE: SIGSEGV in ix86_init_builtins (i386.c:27691) with -fgnu-tm and > any fortran code > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51291 > > I hope this message could help. It does! Thanks for all the help! Torvald