Dear LLVM Developers,<div><br /></div><div>Thank you all for your responses!</div><div>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.</div><div><br /></div><div>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)?</div><div><br /></div><div>I am looking forward to hearing from you again!</div><div><br /></div><div>Respectfully yours,</div><div>Artem Vopilov<br /><br /><div>13.12.2018, 02:20, "Doerfert, Johannes Rudolf" <jdoerfert@anl.gov>:</div><blockquote type="cite"><div><p>I think you two might talk about different things here. As Bekket noted,<br />include the IR you run!<br /><br />If I take your test (c code), compile it to IR, and then run mem2reg,<br />there are _no_ pointers left that could alias. (So you might want to<br />make the example more meaningful).<br /><br />If I do not run mem2reg, the two stack locations that are generated for<br />ptrA and ptrB do not alias as they are _different stack locations_. The<br />values stored at the stack locations do however alias.<br /><br />I hope this helps.<br /><br />On 12/12, Sean Perry via llvm-dev wrote:<br /></p><blockquote> The variables ptra and ptrb don't actually alias.  A simple way to think of<br /> aliasing is to to say two l-values alias if assigning into one changes the<br /> other.  In your program changing the value of ptra does not change the<br /> value of ptrb.  What you do have is two pointers that point to the same<br /> l-value.  The aliasing analysis will show that variable a (which is address<br /> taken) is aliased to a shadow of type int.  Any indirections through ptra<br /> or ptrb will use that same shadow.  This is how clang and llvm get the<br /> aliasing correct.<br /><br /> This is a common mistake when learning about aliasing.  People often think<br /> the pointer should alias the object.  It's really the shadow (i.e. a<br /> pointer indirection) that aliases the object.  In fact you can never have<br /> two variables ever alasing each other.<br /><br /> Regards<br /> --<br /> Sean Perry<br /> Compiler Development<br /> IBM Canada Lab<br /> <span>(905)-413-6031</span> (tie <span>313-6031</span>), fax <span>(905)-413-4839</span><br /><br /><br /><br /><br /> From:    "Артём Вопилов via llvm-dev" <<a href="http:///touch/compose?to=llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><br /> To:        <a href="http:///touch/compose?to=llvm-admin@lists.llvm.org">llvm-admin@lists.llvm.org</a>, <a href="http:///touch/compose?to=llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>,<br />             <a href="http:///touch/compose?to=mailman@lists.llvm.org">mailman@lists.llvm.org</a>, <a href="http:///touch/compose?to=bugs-admin@lists.llvm.org">bugs-admin@lists.llvm.org</a><br /> Date:    12/12/18 11:54 AM<br /> Subject: [llvm-dev] LLVM Alias Analysis<br /> Sent by:    "llvm-dev" <<a href="http:///touch/compose?to=llvm-dev-bounces@lists.llvm.org">llvm-dev-bounces@lists.llvm.org</a>><br /><br /><br /><br /> Dear LLVM Developers,<br /><br /> My name is Artem Vopilov, I am a student at TU Darmstadt. I am writing to<br /> you to ask about Alias Analysis.<br /><br /> I am using llvm to analyze alias between variables in programs. I am using<br /> Alias Analysis implemented in llvm with command "opt -analyze -aa-eval<br /> -print-all-alias-modref-info" and for printing sets of alias "opt -analyze<br /> -aa-eval -print-alias-sets".<br /><br /> I execute these commands on the small test program I attached to this<br /> email.<br /> If you take a look at it, it will be obvious, that variables "ptra" and<br /> "ptrb" alias. However, the results of Alias Analysis do not indicate, that<br /> these variable alias. I would like to ask you, if it is possible to change<br /> the source code of Alias Analysis, so that it will show that "ptra" and<br /> "ptrb" variables from the test program alias.<br /><br /> I am looking forward to hearing from you and hope, that you can help me<br /> solve my problem.<br /><br /> Respectfully yours,<br /> Artem Vopilov<br /> [attachment "Test.c" deleted by Sean Perry/Toronto/IBM]<br /> _______________________________________________<br /> LLVM Developers mailing list<br /> <a href="http:///touch/compose?to=llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br /> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" rel="noopener noreferrer">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br /><br /><br /><br /></blockquote><p><br /><br /><br /></p><blockquote> _______________________________________________<br /> LLVM Developers mailing list<br /> <a href="http:///touch/compose?to=llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br /> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" rel="noopener noreferrer">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br /></blockquote><p><br /><br /></p><span>-- <br /></span><p><br />Johannes Doerfert<br />Researcher<br /><br />Argonne National Laboratory<br />Lemont, IL 60439, USA<br /><br /><a href="http:///touch/compose?to=jdoerfert@anl.gov">jdoerfert@anl.gov</a><br /></p></div></blockquote><div><br /></div><div><br /></div><div></div><div><br /></div></div>