<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">Hi Hal,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I could not get the better result from the new “cfl-aa” as well. But  "cfl-aa" seems to be less accurate than "basicaa" for the following basic example! Am I missing something?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><b>Example:<o:p></o:p></b></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">int func () {<o:p></o:p></p>
<p class="MsoPlainText">  int A[100], B[100];<o:p></o:p></p>
<p class="MsoPlainText">  int i = 0, sum1 =0;<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  for (; i < 100; ++i) {<o:p></o:p></p>
<p class="MsoPlainText">   A[i] = B[i] = i;<o:p></o:p></p>
<p class="MsoPlainText">  }<o:p></o:p></p>
<p class="MsoPlainText"><o:p></o:p></p>
<p class="MsoPlainText">  for (i = 0; i < 100; ++i) {<o:p></o:p></p>
<p class="MsoPlainText">    sum1 += A[i] +  B[i];<o:p></o:p></p>
<p class="MsoPlainText">  }<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  return sum1;<o:p></o:p></p>
<p class="MsoPlainText">}<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><b>Output of “opt -mem2reg -basicaa –print-alias-sets”:<o:p></o:p></b></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Alias Set Tracker: 2 alias sets for 4 pointer values.<o:p></o:p></p>
<p class="MsoPlainText">  AliasSet[0x3b01890, 2] may alias, Mod/Ref   Pointers: (i32* %A.arrayidx, 4), (i32* %A.arrayidx9, 4)<o:p></o:p></p>
<p class="MsoPlainText">  AliasSet[0x3b012a0, 2] may alias, Mod/Ref   Pointers: (i32* %B.arrayidx2, 4), (i32* %B.arrayidx7, 4)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><b>Output of “opt -mem2reg –cfl-aa –print-alias-sets” and “opt –mem2reg –basicaa –cfl-aa –print-alias-sets”:<o:p></o:p></b></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Alias Set Tracker: 1 alias sets for 4 pointer values.<o:p></o:p></p>
<p class="MsoPlainText">  AliasSet[0x3046890, 4] may alias, Mod/Ref   Pointers: (i32* %A.arrayidx, 4), (i32* %B.arrayidx2, 4), (i32* %B.arrayidx7, 4), (i32* %A.arrayidx9, 4)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks,<o:p></o:p></p>
<p class="MsoPlainText">Vinay<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-----Original Message-----<br>
From: Hal Finkel [mailto:hfinkel@anl.gov] <br>
Sent: Monday, September 29, 2014 6:22 PM<br>
To: Madhusudan, Vinay<br>
Cc: LLVM Developers Mailing List (llvmdev@cs.uiuc.edu)<br>
Subject: Re: [LLVMdev] Alias Analysis across functions</p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Hi Vinay,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">The new -cfl-aa has an IPA that might catch this. Also, I'm working on a new pass to do top-down function parameter attribute propagation, which should catch this (<a href="http://reviews.llvm.org/D4609"><span style="color:windowtext;text-decoration:none">http://reviews.llvm.org/D4609</span></a>),
 but it is not quite ready yet.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-Hal<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">----- Original Message -----<o:p></o:p></p>
<p class="MsoPlainText">> From: "Vinay Madhusudan" <<a href="mailto:Vinay.Madhusudan@amd.com"><span style="color:windowtext;text-decoration:none">Vinay.Madhusudan@amd.com</span></a>><o:p></o:p></p>
<p class="MsoPlainText">> To: "LLVM Developers Mailing List (<a href="mailto:llvmdev@cs.uiuc.edu"><span style="color:windowtext;text-decoration:none">llvmdev@cs.uiuc.edu</span></a>)"
<o:p></o:p></p>
<p class="MsoPlainText">> <<a href="mailto:llvmdev@cs.uiuc.edu"><span style="color:windowtext;text-decoration:none">llvmdev@cs.uiuc.edu</span></a>><o:p></o:p></p>
<p class="MsoPlainText">> Sent: Monday, September 29, 2014 12:55:18 AM<o:p></o:p></p>
<p class="MsoPlainText">> Subject: [LLVMdev] Alias Analysis across functions<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Hi,<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> I am trying to get the alias info for the following code. The alias
<o:p></o:p></p>
<p class="MsoPlainText">> analysis returns “MayAlias” for arrays “A” and “B” in both the
<o:p></o:p></p>
<p class="MsoPlainText">> functions instead of “NoAlias”. What passes should I run in opt before
<o:p></o:p></p>
<p class="MsoPlainText">> the alias analysis pass to get the accurate result?<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Example:<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> //Note: static and called by func() only.<o:p></o:p></p>
<p class="MsoPlainText">> static int sum(int *A, int *B) {<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> int i = 0, sum1 = 0;<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> for (i = 0; i < 100; ++i) {<o:p></o:p></p>
<p class="MsoPlainText">> sum1 += A[i] + B[i];<o:p></o:p></p>
<p class="MsoPlainText">> }<o:p></o:p></p>
<p class="MsoPlainText">> return sum1;<o:p></o:p></p>
<p class="MsoPlainText">> }<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> int func () {<o:p></o:p></p>
<p class="MsoPlainText">> int A[100], B[100];<o:p></o:p></p>
<p class="MsoPlainText">> int i = 0;<o:p></o:p></p>
<p class="MsoPlainText">> for (; i < 100; ++i) {<o:p></o:p></p>
<p class="MsoPlainText">> A[i] = B[i] = i;<o:p></o:p></p>
<p class="MsoPlainText">> }<o:p></o:p></p>
<p class="MsoPlainText">> return sum(A,B);<o:p></o:p></p>
<p class="MsoPlainText">> }<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Arguments to opt : “ -mem2reg -basicaa - scev-aa -print-alias-sets ”<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Output:<o:p></o:p></p>
<p class="MsoPlainText">> Function: func<o:p></o:p></p>
<p class="MsoPlainText">> Alias Set Tracker: 2 alias sets for 2 pointer values.<o:p></o:p></p>
<p class="MsoPlainText">> AliasSet[0x2bc88b0, 2] may alias, Mod/Ref Pointers: (i32* %A.arrayidx,
<o:p></o:p></p>
<p class="MsoPlainText">> 4), (i32* %B.arrayidx2, 4)<o:p></o:p></p>
<p class="MsoPlainText">> 1 Unknown instructions: i32 %call<o:p></o:p></p>
<p class="MsoPlainText">> AliasSet[0x2bc8490, 1] must alias, Mod forwarding to 0x2bc88b0<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Function: sum<o:p></o:p></p>
<p class="MsoPlainText">> Alias Set Tracker: 1 alias sets for 2 pointer values.<o:p></o:p></p>
<p class="MsoPlainText">> AliasSet[0x2bcbb50, 2] may alias, Ref Pointers: (i32* %A.arrayidx, 4),
<o:p></o:p></p>
<p class="MsoPlainText">> (i32* %B.arrayidx2, 4)<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Thanks,<o:p></o:p></p>
<p class="MsoPlainText">> Vinay<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> _______________________________________________<o:p></o:p></p>
<p class="MsoPlainText">> LLVM Developers mailing list<o:p></o:p></p>
<p class="MsoPlainText">> <a href="mailto:LLVMdev@cs.uiuc.edu"><span style="color:windowtext;text-decoration:none">LLVMdev@cs.uiuc.edu</span></a>        
<a href="http://llvm.cs.uiuc.edu"><span style="color:windowtext;text-decoration:none">http://llvm.cs.uiuc.edu</span></a><o:p></o:p></p>
<p class="MsoPlainText">> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">
<span style="color:windowtext;text-decoration:none">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</span></a><o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">--<o:p></o:p></p>
<p class="MsoPlainText">Hal Finkel<o:p></o:p></p>
<p class="MsoPlainText">Assistant Computational Scientist<o:p></o:p></p>
<p class="MsoPlainText">Leadership Computing Facility<o:p></o:p></p>
<p class="MsoPlainText">Argonne National Laboratory<o:p></o:p></p>
</div>
</body>
</html>