http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55508
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |aldyh at gcc dot gnu.org,
| |torvald at gcc dot gnu.org
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-28
08:44:46 UTC ---
This is because the calls (with my pending patch builtins, but that hasn't been
reviewed yet) are added in between lower_tm? pass and the final tm
transformation pass, and there is
/* We can have a nodeless call here if some pass after IPA-tm
added uninstrumented calls. For example, loop distribution
can transform certain loop constructs into __builtin_mem*
calls. In this case, see if we have a suitable TM
replacement and fill in the gaps. */
gcc_assert (DECL_BUILT_IN_CLASS (fn_decl) == BUILT_IN_NORMAL);
enum built_in_function code = DECL_FUNCTION_CODE (fn_decl);
gcc_assert (code == BUILT_IN_MEMCPY
|| code == BUILT_IN_MEMMOVE
|| code == BUILT_IN_MEMSET);
The question is what to do with the asan/tsan library calls in transactions.
The asan report calls are just verification functions, which for normal
programs shouldn't have any visible effect, so perhaps we could lie about them
and say that they are transaction_safe (or transaction_callable?, dunno which)
and create cgraph nodes for them and clear node->local.tm_may_enter_irr,
basically pretend they aren't there.
For tsan the question is whether even that is useful at all when tsan doesn't
wrap begin/end/abort transaction library calls and doesn't take transactions
into account at all.