A question about alias analysis

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