[llvm-dev] Propagating noalias annotation
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Fri Nov 17 00:07:26 PST 2017
On 11/17/2017 02:01 AM, Hongbin Zheng wrote:
> Do you mean a and b are noalias if:
>
> static int foo(int *a, int *b) {
> return a[0] + b[0];
> }
>
> int bar(int *x) {
> return foo(x+1, x);
> }
>
> ?
>
> To me, because "AA.alias((x+1, MemoryLocation::UnknownSize),
> (x, MemoryLocation::UnknownSize)) != NoAlias", so a and b are not noalias.
Remember that MemoryLocation::UnknownSize is unknown, but positive. So
you need to check both "AA.alias((x+1, MemoryLocation::UnknownSize), (x,
MemoryLocation::UnknownSize)) == NoAlias" and "AA.alias((x,
MemoryLocation::UnknownSize), (x+1, MemoryLocation::UnknownSize)) ==
NoAlias" to partition by underlying object. One of these should be false.
-Hal
> Maybe my version is too conservative.
>
> Thanks
> Hongbin
>
>
> On Thu, Nov 16, 2017 at 11:55 PM, Hal Finkel <hfinkel at anl.gov
> <mailto:hfinkel at anl.gov>> wrote:
>
>
> On 11/17/2017 01:49 AM, Hongbin Zheng wrote:
>> Could you elaborate "Note that, without further analysis of the
>> uses of the potentially-noalias pointers, you can do this only ..."?
>> Why the uses, instead of the def, of pointer matter?
>
> Both matter.
>
> static int foo(int *a, int *b) {
> return a[0] + b[1];
> }
>
> int bar(int *x) {
> return foo(x+1, x);
> }
>
> You can't mark a and b as noalias here, even though NoAlias(x+1,
> x) == true. This is why I was saying that, unless the pointers
> come from distinct, identified underlying objects, you need to
> look at the uses of the pointers too.
>
> -Hal
>
> P.S. As discussed in D4609, we probably want to try adding CGSCC
> AA wrappers, to look back through function arguments, instead of
> using attribute propagation.
>
>
>>
>> Thanks
>> Hongbin
>>
>> On Thu, Nov 16, 2017 at 11:21 PM, Hal Finkel via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Hi, Alexandre,
>>
>> We don't have anything currently which does this. Note that,
>> without further analysis of the uses of the
>> potentially-noalias pointers, you can do this only for
>> arguments with distinct (and identified) underlying objects
>> (i.e., you need something a bit stronger than just
>> "non-aliasing pointers").
>>
>> -Hal
>>
>>
>> On 11/16/2017 10:11 AM, via llvm-dev wrote:
>>
>> Is this what you are looking for?
>>
>> https://reviews.llvm.org/D4609
>>
>> Best,
>>
>> Haicheng Wu
>>
>> On 2017-11-14 20:34, Alexandre Isoard via llvm-dev wrote:
>>
>> Hello,
>>
>> Do we have a pass that propagate the noalias
>> annotation down to the
>> callee when:
>> - it is static
>> - it is always called with non aliasing pointers
>> ?
>>
>> Or maybe that is incorrect?
>>
>> --
>>
>> ALEXANDRE ISOARD
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>> --
>> Hal Finkel
>> Lead, Compiler Technology and Programming Languages
>> Leadership Computing Facility
>> Argonne National Laboratory
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171117/1c95a6a1/attachment.html>
More information about the llvm-dev
mailing list