[llvm-dev] llvm MemorySSA def-use chains
Hayrapetyan, Anahit via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 9 06:00:14 PDT 2018
Hi,
I have a question about how llvm MemorySSA works, as seems I misunderstand something.
Consider following code snippet and corresponding IR with MemorySSA annotations (got with opt -print-memoryssa)
void foo(int* b) {
int a = 0;
int d = 12;
if (b) {
a = 42;
d = 32;
}
int c = a;
int e = d;
}
; Function Attrs: noinline nounwind optnone uwtable
define void @foo(i32* %b) #0 {
entry:
%b.addr = alloca i32*, align 8
%a = alloca i32, align 4
%d = alloca i32, align 4
%c = alloca i32, align 4
%e = alloca i32, align 4
; 1 = MemoryDef(liveOnEntry)
store i32* %b, i32** %b.addr, align 8
; 2 = MemoryDef(1)
store i32 0, i32* %a, align 4
; 3 = MemoryDef(2)
store i32 12, i32* %d, align 4
; MemoryUse(1)
%0 = load i32*, i32** %b.addr, align 8
%tobool = icmp ne i32* %0, null
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
; 4 = MemoryDef(3)
store i32 42, i32* %a, align 4
; 5 = MemoryDef(4)
store i32 32, i32* %d, align 4
br label %if.end
if.end: ; preds = %if.then, %entry
; 9 = MemoryPhi({entry,3},{if.then,5})
; MemoryUse(9)
%1 = load i32, i32* %a, align 4
; 6 = MemoryDef(9)
store i32 %1, i32* %c, align 4
; MemoryUse(9)
%2 = load i32, i32* %d, align 4
; 7 = MemoryDef(6)
store i32 %2, i32* %e, align 4
ret void
}
Tracking back def-use chain for `%1 = load i32, i32* %a, align 4` first I get `9 = MemoryPhi({entry,3},{if.then,5})` and then as definitions MemoryDef(2) which corresponds to `store i32 12, i32* %d, align 4` and MemoryDef(4) corresponding to `store i32 32, i32* %d, align 4`. However neither of these stores define `a`, they both define `d`. What I was expecting to get was MemoryDef(3) and MemoryDef(1), which are real definitions for `a`.
Could you please explain what's the reason MemorySSA gives incorrect definitions, and is there any way to get the correct ones.
Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180809/6885e169/attachment.html>
More information about the llvm-dev
mailing list