http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55401
Bug #: 55401 Summary: uninstrumented path in TM clones are still instrumented Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: middle-end AssignedTo: unassig...@gcc.gnu.org ReportedBy: al...@gcc.gnu.org If a transaction appears in a TM clone, the uninstrumented path still gets instrumented. Example: int george; int ringo; __attribute__((transaction_callable)) void q1() { ringo=666; __transaction_atomic { george=999; } } Generated code: <bb 2>: _8 = 666; __builtin__ITM_WU4 (&ringo, _8); tm_state.5_11 = __builtin__ITM_beginTransaction (43); _12 = tm_state.5_11 & 2; if (_12 != 0) goto <bb 3>; else goto <bb 4>; <bb 3>: _13 = 999; __builtin__ITM_WU4 (&george, _13); __builtin__ITM_commitTransaction (); goto <bb 5>; <bb 4>: _15 = 999; __builtin__ITM_WU4 (&george, _15); __builtin__ITM_commitTransaction (); <bb 5>: return;