[llvm-dev] MayAlias in MemorySSA
sushant gokhale via llvm-dev
llvm-dev at lists.llvm.org
Tue Mar 9 10:16:33 PST 2021
For the following C code:
__attribute__((noinline)) void foo(int i,int j){ printf("%d
%d",i,j);}int main(){ int j; int k; scanf("%d%d",&j,&k);
j+=10; k-=3; //func call to force the stores foo(j,k);
//func call to force the loads printf("%d %d",j,k);}
The MemSSA generated is:
define dso_local i32 @main() #2 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = bitcast i32* %1 to i8*
; 1 = MemoryDef(liveOnEntry)
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %3) #5
%4 = bitcast i32* %2 to i8*
; 2 = MemoryDef(1)
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %4) #5
%5 = getelementptr inbounds [5 x i8], [5 x i8]* @.str.1, i64 0, i64 0
; 3 = MemoryDef(2)
%6 = call i32 (i8*, ...) @__isoc99_scanf(i8* %5, i32* nonnull %1, i32*
nonnull %2)
; MemoryUse(3) MayAlias
%7 = load i32, i32* %1, align 4, !tbaa !5
%8 = add nsw i32 %7, 10
; 4 = MemoryDef(3)
store i32 %8, i32* %1, align 4, !tbaa !5
; MemoryUse(3) MayAlias
%9 = load i32, i32* %2, align 4, !tbaa !5
%10 = add nsw i32 %9, -3
; 5 = MemoryDef(4)
store i32 %10, i32* %2, align 4, !tbaa !5
; 6 = MemoryDef(5)
call void @foo(i32 %8, i32 %10)
; MemoryUse(6) MayAlias
%11 = load i32, i32* %1, align 4, !tbaa !5
; MemoryUse(6) MayAlias
%12 = load i32, i32* %2, align 4, !tbaa !5
%13 = getelementptr inbounds [6 x i8], [6 x i8]* @.str, i64 0, i64 0
; 7 = MemoryDef(6)
%14 = call i32 (i8*, ...) @printf(i8* nonnull dereferenceable(1) %13, i32
%11, i32 %12)
Now, considering the block:
MemoryUse(6) MayAlias
%11 = load i32, i32* %1, align 4, !tbaa !5
I have 2 questions:
1.why is Alias information shown alongwith MemSSA graph?
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?
Regards
Sushant
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210309/1b1cff8e/attachment.html>
More information about the llvm-dev
mailing list