On Wed, Jan 25, 2012 at 3:27 PM, Aldy Hernandez <al...@redhat.com> wrote:
> On 01/25/12 08:23, Richard Guenther wrote:
>>
>> On Wed, Jan 25, 2012 at 2:00 PM, Aldy Hernandez<al...@redhat.com>  wrote:
>>>
>>>
>>>>> Second, it seems that by design, LTO prefers builtins to user-provided
>>>>> versions of them.  In particular, lto_symtab_prevailing_decl()
>>>>> stipulates
>>>>> that builtins are their own prevailing decl.  So even if we lowered TM
>>>>> before LTO streaming, user provided builtins wouldn't be preferred (and
>>>>> thus
>>>>> inlined) as we would expect into application code.
>>>>
>>>>
>>>>
>>>> Hmm, so you say you have sth like
>>>>
>>>> void *memcpy(void *dst, void *src, size_t n) { ...implementation... }
>>>> void foo()
>>>> {
>>>>   memcpy (...);
>>>> }
>>>>
>>>> and expect it to be inlined from the supplied body instead of using the
>>>> builtin expander?
>>>
>>>
>>>
>>> Yes.  Ultimately we want to do exactly that with TM instrumented code.
>>>
>>>
>>>> I think we could make this work ... at least under a sort-of ODR, that
>>>> all bodies (from different TUs) and the builtin have the same behavior.
>>>>
>>>> Mind to file an enhancement bug?  Does it work without LTO?
>>>
>>>
>>>
>>> Without LTO the memcpy gets inlined correctly.  This is what I am using:
>>>
>>> houston:/build/t/gcc$ cat a.c
>>> char *dst, *src;
>>>
>>> void *memcpy(void *, const void *, __SIZE_TYPE__);
>>>
>>> main()
>>> {
>>>  memcpy(dst, src, 123);
>>> }
>>> houston:/build/t/gcc$ cat b.c
>>> extern int putchar(int);
>>>
>>> void *memcpy(void *dst,
>>>             const void *src,
>>>             __SIZE_TYPE__ n)
>>> {
>>>  putchar(13);
>>> }
>>> houston:/build/t/gcc$ ./xgcc -B./ -flto -O3 a.c b.c -save-temps -o a.out
>>
>>
>> Of course that's an invalid testcase ;)  GCC correctly assumed that your
>> memcpy has the same kind of side-effects as __builtin_memcpy.  So
>> you can't observe, in a valid runtime testcase, which copy chose.
>
> Ah!  What do you suggest as a testcase?

I don't see anything suitable for inclusion in the testsuite.  Yours certainly
does it for development - simply make src and dst volatile.

Richard.

Reply via email to