<div dir="ltr"><div>For the following C code:</div><div>
<div><pre><code>__attribute__((noinline)) <span><span>void</span> <span>foo</span><span>(<span>int</span> i,<span>int</span> j)</span>
<span></span></span>{
<span></span>    <span>printf</span>(<span>"%d %d"</span>,i,j);
<span></span>}
<span></span><span><span>int</span> <span>main</span><span>()</span>
<span></span></span>{
<span></span>    <span>int</span> j;
<span></span>    <span>int</span> k;
<span></span>    <span>scanf</span>(<span>"%d%d"</span>,&j,&k);
<span></span>    j+=<span>10</span>;
<span></span>    k-=<span>3</span>;
<span></span>
<span></span>    <span>//func call to force the stores</span>
<span></span>    foo(j,k);
<span></span>
<span></span>    <span>//func call to force the loads</span>
<span></span>    <span>printf</span>(<span>"%d %d"</span>,j,k);
<span></span>}</code></pre>

</div><div><br></div>

</div><div>The MemSSA generated is:</div><div>
define dso_local i32 @main() #2 {<br>  %1 = alloca i32, align 4<br>  %2 = alloca i32, align 4<br>  %3 = bitcast i32* %1 to i8*<br>; 1 = MemoryDef(liveOnEntry)<br>  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %3) #5<br>  %4 = bitcast i32* %2 to i8*<br>; 2 = MemoryDef(1)<br>  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %4) #5<br>  %5 = getelementptr inbounds [5 x i8], [5 x i8]* @.str.1, i64 0, i64 0<br>; 3 = MemoryDef(2)<br>  %6 = call i32 (i8*, ...) @__isoc99_scanf(i8* %5, i32* nonnull %1, i32* nonnull %2)<br>; MemoryUse(3) MayAlias<br>  %7 = load i32, i32* %1, align 4, !tbaa !5<br>  %8 = add nsw i32 %7, 10<br>; 4 = MemoryDef(3)<br>  store i32 %8, i32* %1, align 4, !tbaa !5<br>; MemoryUse(3) MayAlias<br>  %9 = load i32, i32* %2, align 4, !tbaa !5<br>  %10 = add nsw i32 %9, -3<br>; 5 = MemoryDef(4)<br>  store i32 %10, i32* %2, align 4, !tbaa !5<br>; 6 = MemoryDef(5)<br>  call void @foo(i32 %8, i32 %10)<br>; MemoryUse(6) MayAlias<br>  %11 = load i32, i32* %1, align 4, !tbaa !5<br>; MemoryUse(6) MayAlias<br>  %12 = load i32, i32* %2, align 4, !tbaa !5<br>  %13 = getelementptr inbounds [6 x i8], [6 x i8]* @.str, i64 0, i64 0<br>; 7 = MemoryDef(6)<br>  %14 = call i32 (i8*, ...) @printf(i8* nonnull dereferenceable(1) %13, i32 %11, i32 %12) <br></div><div><br></div><div>Now, considering the block:<br>
 MemoryUse(6) MayAlias<br>  %11 = load i32, i32* %1, align 4, !tbaa !5 <br></div><div><br></div><div>I have 2 questions:</div><div></div><div>1.why is Alias information shown alongwith MemSSA graph?</div><div>
2. what does MayAlias mean here? Does it mean that this load may depend upon operand being referred/modified  in 
6 = MemoryDef(5) ?  Or is it something else? <br></div><div><br></div><div>Regards</div><div>Sushant<br></div></div>