[llvm-dev] One more No-alias case on Alias analysis

jingu@codeplay.com via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 11 10:06:55 PDT 2018


Hello All,

I have met one may-alias case from llvm's alias analysis. The code 
snippet is as following:

char buf[4];

void test (int idx) {
char *a = &buf[3 - idx];
char *b = &buf[idx];
*a = 1;
*b = 2;
}

I can see below output from alias set tracker for above code snippet.

Alias sets for function 'test':
Alias Set Tracker: 1 alias sets for 2 pointer values.
   AliasSet[0x53d8070, 2] may alias, Mod       Pointers: (i8* %arrayidx, 
1), (i8* %arrayidx2, 1)

As you can see on above code snippet, the 'a' and 'b' are not aliased. I 
think if we have following offset form, we can say No-alias between them.

offset1 = odd_number - index

offset2 = index

I have implemented simple code for it and the output is as following:

Alias sets for function 'test':
Alias Set Tracker: 2 alias sets for 2 pointer values.
   AliasSet[0x541a070, 1] must alias, Mod       Pointers: (i8* %arrayidx, 1)
   AliasSet[0x541cc00, 1] must alias, Mod       Pointers: (i8* 
%arrayidx2, 1)

How do you think about this? Is it legal for current alias analysis or 
not? I have attached the diff file as reference. If I missed something, 
please let me know.

Thanks,

JinGu Kang


-------------- next part --------------
A non-text attachment was scrubbed...
Name: alias.diff
Type: text/x-patch
Size: 2215 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180611/156e7c79/attachment.bin>


More information about the llvm-dev mailing list