<div dir="ltr"><div>Thanks for the information.</div><div><br></div><div>Regards</div><div>Sushant<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 10, 2021 at 1:57 AM Alina Sbirlea <<a href="mailto:alina.sbirlea@gmail.com">alina.sbirlea@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>1. Alias information is only informative. It is displayed for accesses that have been optimized and it is stored as part of the memory access that displays it.</div><div>2. MayAlias for that instruction means the load instruction reads from a location that may overlap with locations written to by `call void @foo`.</div><div>In your example foo only reads to I suspect that if you add `readnone` to its attribute list, `MemoryUse(6) MayAlias` will become `MemoryUse(4) MustAlias`.</div><div><br></div><div>Best,</div><div>Alina</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 9, 2021 at 10:16 AM sushant gokhale via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><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>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div>