Oh, your meaning is pointers in a aliasset have equal address logically?
But I think that two pointers are alias means they point to a same
memory object, so if pointers "p" and "q" are alias, it seem as p = q,
not &p = &q.
Another question is about "forwarding".
"AliasSet[XXXX, 0] may alias, Mod/Ref forwarding to YYYY" (XXXX != YYYY)
means the address XXXX can be regarded as YYYY in interprocedural analysis,
and XXXX should be ignored?
Thank you.
Oh, your meaning is pointers in a aliasset have equal address logically?
But I think that two pointers are alias means they point to a same
memory object, so if pointers "p" and "q" are alias, it seem as p = q,
not &p = &q.
No, you're confused how globals are represented in LLVM. Looking at C source isn't going to get you very far, because the C compiler does a lot of optimization. If you want to see what your analysis is analyzing, use something like this:
$ llvm-gcc hello.c -o hello.bc
$ opt -ds-aa -load ../Debug/lib/fps.so -FPS < hello.bc > /dev/null
$ llvm-dis < hello.bc
In LLVM, globals are represented by their address. To get the the value of a global, you have to use a load or store instruction. Check out the LangRef.html and other documents for more details.
Another question is about "forwarding". "AliasSet[XXXX, 0] may alias, Mod/Ref forwarding to YYYY" (XXXX != YYYY) means the address XXXX can be regarded as YYYY in interprocedural analysis, and XXXX should be ignored?
The AliasSetTracker uses a union-find algorithm internally, and forwarding links are part of this. If a set "A" is forwarding to a set "B", this means that all of the pointers in sets "A" and "B" are really in the same set.
-Chris