(original) (raw)

Dear LLVM Developers,


Thank you all for your responses!
I think, they helped me to understand the Alias Analysis. The main thing i understood is that alias analysis will not indicate that variables alias if changing the value of one variable will not affect value of another variable.

But if I want to find all pointers, which point to the same memory location, can I do this with llvm without transforming test program code (with -analyze flag)?

I am looking forward to hearing from you again!

Respectfully yours,
Artem Vopilov

13.12.2018, 02:20, "Doerfert, Johannes Rudolf" jdoerfert@anl.gov:

I think you two might talk about different things here. As Bekket noted,
include the IR you run!

If I take your test (c code), compile it to IR, and then run mem2reg,
there are _no_ pointers left that could alias. (So you might want to
make the example more meaningful).

If I do not run mem2reg, the two stack locations that are generated for
ptrA and ptrB do not alias as they are _different stack locations_. The
values stored at the stack locations do however alias.

I hope this helps.

On 12/12, Sean Perry via llvm-dev wrote:

The variables ptra and ptrb don't actually alias. A simple way to think of
aliasing is to to say two l-values alias if assigning into one changes the
other. In your program changing the value of ptra does not change the
value of ptrb. What you do have is two pointers that point to the same
l-value. The aliasing analysis will show that variable a (which is address
taken) is aliased to a shadow of type int. Any indirections through ptra
or ptrb will use that same shadow. This is how clang and llvm get the
aliasing correct.

This is a common mistake when learning about aliasing. People often think
the pointer should alias the object. It's really the shadow (i.e. a
pointer indirection) that aliases the object. In fact you can never have
two variables ever alasing each other.

Regards
--
Sean Perry
Compiler Development
IBM Canada Lab
(905)-413-6031 (tie 313-6031), fax (905)-413-4839




From: "Артём Вопилов via llvm-dev" <llvm-dev@lists.llvm.org>
To: llvm-admin@lists.llvm.org, llvm-dev@lists.llvm.org,
mailman@lists.llvm.org, bugs-admin@lists.llvm.org
Date: 12/12/18 11:54 AM
Subject: [llvm-dev] LLVM Alias Analysis
Sent by: "llvm-dev" <llvm-dev-bounces@lists.llvm.org>



Dear LLVM Developers,

My name is Artem Vopilov, I am a student at TU Darmstadt. I am writing to
you to ask about Alias Analysis.

I am using llvm to analyze alias between variables in programs. I am using
Alias Analysis implemented in llvm with command "opt -analyze -aa-eval
-print-all-alias-modref-info" and for printing sets of alias "opt -analyze
-aa-eval -print-alias-sets".

I execute these commands on the small test program I attached to this
email.
If you take a look at it, it will be obvious, that variables "ptra" and
"ptrb" alias. However, the results of Alias Analysis do not indicate, that
these variable alias. I would like to ask you, if it is possible to change
the source code of Alias Analysis, so that it will show that "ptra" and
"ptrb" variables from the test program alias.

I am looking forward to hearing from you and hope, that you can help me
solve my problem.

Respectfully yours,
Artem Vopilov
[attachment "Test.c" deleted by Sean Perry/Toronto/IBM]
_______________________________________________
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev






_______________________________________________
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



--


Johannes Doerfert
Researcher

Argonne National Laboratory
Lemont, IL 60439, USA

jdoerfert@anl.gov