<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;">
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p><span id="ms-rterangepaste-start"></span><span id="docs-internal-guid-a663f343-143d-ef81-9e99-9c08bb7392cd">Hi,
</span></p>
<p><br>
</p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">I’m writing an analysis pass which is supposed to find instructions
 in a function that modify function’s by-ref arguments. For that I’m using llvm AliasAnalysis pass, particularly querying for ModRef info for instructions and function arguments, to see if a given instruction modifies a given argument. However, for functions
 with more than one by-ref argument, I get strange results. Instructions, which modify one of the arguments, are reported as modifying the others too - saying, ModRef info of those instructions is Mod for all arguments.</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">For this example</span></p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><i>void function(int& n, int& m)</i></span></p>
</div>
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><i>{</i></span></p>
</div>
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><i>int tmp = m;</i></span></p>
</div>
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><i>n = tmp;</i></span></p>
</div>
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><i>}</i></span></p>
</div>
</blockquote>
<div style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><br>
</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">Arguments
<i>n</i> and <i>m</i> are marked as MayAlias, and storing <i>tmp</i> into <i>n</i> is reported to modify
<i>m</i> too.</span></p>
<br>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">I found a few discussions about this problem. In one of them,
 it was suggested to use cfl-aa, I tried it and it did not solve the problem.</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">In another one they said that this happens on purpose. llvm
 Alias Analysis marks function’s by-ref arguments MayAlias, as function may be called with arguments referencing the same variable.</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><br>
</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">So I would like to ask whether this is the case. And if it
 is, is there a way to make llvm ignore this consideration?</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap"><br>
</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">Thanks,</span></p>
<p dir="ltr" style="line-height:1.38; margin-top:0pt; margin-bottom:0pt"><span style="font-size:11pt; font-family:Arial; background-color:transparent; vertical-align:baseline; white-space:pre-wrap">Anahit.</span></p>
<br>
<span id="ms-rterangepaste-end"></span><br>
<p></p>
</div>
</div>
</body>
</html>