[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