On Tue, Jun 5, 2012 at 2:21 AM, Richard Guenther <rguent...@suse.de> wrote:
> On Thu, 31 May 2012, Richard Guenther wrote:
>
>> On Wed, 30 May 2012, Richard Guenther wrote:
>>
>> >
>> > The patch below extents memset recognition to cover a few more
>> > non-byte-size store loops and all byte-size store loops.  This exposes
>> > issues with our builtins.exp testsuite which has custom memset
>> > routines like
>> >
>> > void *
>> > my_memset (void *d, int c, size_t n)
>> > {
>> >   char *dst = (char *) d;
>> >   while (n--)
>> >     *dst++ = c;
>> >   return (char *) d;
>> > }
>> >
>> > Now, for LTO we have papered over similar issues by attaching
>> > the used attribute to the functions.  But the general question is - when
>> > can we be sure the function we are dealing with are not the actual
>> > implementation for the builtin call we want to generate?  A few
>> > things come to my mind:
>> >
>> >  1) the function already calls the function we want to generate (well,
>> >     it might be a tail-recursive memset implementation ...)
>> >
>> >  2) the function availability is AVAIL_LOCAL
>> >
>> >  3) ... ?
>> >
>> > For sure 2) would work, but it would severely restrict the transform
>> > (do we care?).
>> >
>> > We have a similar issue with sin/cos -> sincos transform and a
>> > trivial sincos implementation.
>> >
>> > Any ideas?
>> >
>> > Bootstrapped (with memset recognition enabled by default) and tested
>> > on x86_64-unknown-linux-gnu with the aforementioned issues.
>>
>> The following fixes it by simply always adding
>> -fno-tree-loop-distribute-patterns to builtins.exp.
>>
>> Bootstrapped and tested on x86_64-unknown-linux-gnu.
>>
>> If there are no further comments I'll go with the local advise from
>> Micha who says "who cares".
>
> Now done with the much simpler patch below (after all the loop
> distribution TLC).
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
>
> Richard.
>
> 2012-06-05  Richard Guenther  <rguent...@suse.de>
>
>         PR tree-optimization/53081
>         * tree-loop-distribution.c (generate_memset_builtin): Handle all
>         kinds of byte-sized stores.
>         (classify_partition): Likewise.
>         (tree_loop_distribution): Adjust seed statements used for
>         !flag_tree_loop_distribution.
>
>         * gcc.dg/tree-ssa/ldist-19.c: New testcase.
>         * gcc.c-torture/execute/builtins/builtins.exp: Always pass
>         -fno-tree-loop-distribute-patterns.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54321


-- 
H.J.

Reply via email to