<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,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0"></p>
<div>Hi </div>
<div>I have this simple c code for which I would like to use for alias analysis. </div>
<div><br>
</div>
<p></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<p style="margin-top:0;margin-bottom:0"></p>
<div>#include <stdio.h></div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>#include <stdlib.h></div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>static int (*fp) (void); </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>void ind_call (int (*compr)(void)){ </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    fp = compr; </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    fp(); </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>int hello(void){ </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    return printf("hello world\n"); </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>int main(){ </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    ind_call(hello); </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    return 0; </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
</blockquote>
<p style="margin-top:0;margin-bottom:0"></p>
<div></div>
<div><br>
</div>
<div>So, I do the following: </div>
<p></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<p style="margin-top:0;margin-bottom:0"></p>
<div>bin/opt -basicaa -cfl-anders-aa -print-alias-sets bin/test/test.bc </div>
<p></p>
</blockquote>
<p style="margin-top:0;margin-bottom:0"></p>
<div></div>
<div><br>
</div>
<div>I get the following result: </div>
<p></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias sets for function 'ind_call': </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias Set Tracker: 2 alias sets for 2 pointer values. </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  AliasSet[0x91a5820, 1] must alias, Mod/Ref   Pointers: (i32 ()** %compr.addr, 8) </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  AliasSet[0x91a58c0, 2] may alias, Mod/Ref   Pointers: (i32 ()** @fp, 8) </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    1 Unknown instructions: i32 %call </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias sets for function 'hello': </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias Set Tracker: 1 alias sets for 0 pointer values. </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  AliasSet[0x91a5910, 1] may alias, Mod/Ref   </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    1 Unknown instructions: i32 %call </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias sets for function 'main': </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>Alias Set Tracker: 2 alias sets for 1 pointer values. </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  AliasSet[0x91a5a50, 1] must alias, Mod       Pointers: (i32* %retval, 4) </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  AliasSet[0x91a5aa0, 1] may alias, Mod/Ref   </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>    1 Unknown instructions: void <badref></div>
<p></p>
</blockquote>
<p style="margin-top:0;margin-bottom:0"></p>
<div></div>
<div><br>
</div>
<div>My question is from c code when we can notice that <i>fp</i> and <i class="">
compr</i> target to same address (because of <i>fp</i> = <i class="">compr</i>), why they are not in the same alias set. As you can see, for function
<i>ind_call</i>, the alias set that contain <i class="">fp</i> is along, while from my understanding there should be another alias
<i class="">compr</i>. </div>
<div><br>
</div>
<div>For better understanding, I also include the LLVM IR here (generated by LLVM-7.0): </div>
<p></p>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<p style="margin-top:0;margin-bottom:0"></p>
<div>; ModuleID = 'test.c' </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>source_filename = "test.c" </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>target triple = "x86_64-unknown-linux-gnu" </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>@fp = internal global i32 ()* null, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00", align 1 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>; Function Attrs: noinline nounwind optnone uwtable </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>define dso_local void @ind_call(i32 ()* %compr) #0 { </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>entry: </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %compr.addr = alloca i32 ()*, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  store i32 ()* %compr, i32 ()** %compr.addr, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %0 = load i32 ()*, i32 ()** %compr.addr, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  store i32 ()* %0, i32 ()** @fp, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %1 = load i32 ()*, i32 ()** @fp, align 8 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %call = call i32 %1() </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  ret void </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>; Function Attrs: noinline nounwind optnone uwtable </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>define dso_local i32 @hello() #0 { </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>entry: </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  ret i32 %call </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>declare dso_local i32 @printf(i8*, ...) #1 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>; Function Attrs: noinline nounwind optnone uwtable </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>define dso_local i32 @main() #0 { </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>entry: </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  %retval = alloca i32, align 4 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  store i32 0, i32* %retval, align 4 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  call void @ind_call(i32 ()* @hello) </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>  ret i32 0 </div>
<p></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>} </div>
<p></p>
</blockquote>
<p style="margin-top:0;margin-bottom:0"></p>
<div></div>
<p></p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<div id="Signature">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<font face="'Comic Sans MS',Fantasy,cursive">Best Regards<br>
<font face="'Comic Sans MS',Fantasy,cursive">Mustakimur Rahman Khandaker<br>
<font face="'Comic Sans MS',Fantasy,cursive">G<font face="'Comic Sans MS',Fantasy,cursive">raduate Student and Research Assistant<br>
<font face="'Comic Sans MS',Fantasy,cursive">Department of Computer Science<br>
<font face="'Comic Sans MS',Fantasy,cursive">Florida State University</font><br>
</font></font></font></font></font></div>
</div>
</div>
</body>
</html>