From 3887a4172528d14b88b5d254866c4466fbddcfc9 Mon Sep 17 00:00:00 2001 From: George Burgess IV Date: Mon, 21 Mar 2016 21:25:39 +0000 Subject: [MemorySSA] Consider def-only BBs for live-in calculations. If we have a BB with only MemoryDefs, live-in calculations will ignore it. This means we get results like this: define void @foo(i8* %p) { ; 1 = MemoryDef(liveOnEntry) store i8 0, i8* %p br i1 undef, label %if.then, label %if.end if.then: ; 2 = MemoryDef(1) store i8 1, i8* %p br label %if.end if.end: ; 3 = MemoryDef(1) store i8 2, i8* %p ret void } ...When there should be a MemoryPhi in the `if.end` BB. This patch fixes that behavior. llvm-svn: 263991 --- llvm/lib/Transforms/Utils/MemorySSA.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'llvm/lib/Transforms/Utils/MemorySSA.cpp') diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index f49d666d1a0..a794406da15 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -253,17 +253,13 @@ MemorySSAWalker *MemorySSA::buildMemorySSA(AliasAnalysis *AA, // Go through each block, figure out where defs occur, and chain together all // the accesses. for (BasicBlock &B : F) { - bool InsertIntoDefUse = false; bool InsertIntoDef = false; AccessListType *Accesses = nullptr; for (Instruction &I : B) { MemoryUseOrDef *MUD = createNewAccess(&I, true); if (!MUD) continue; - if (isa(MUD)) - InsertIntoDef = true; - else - InsertIntoDefUse = true; + InsertIntoDef |= isa(MUD); if (!Accesses) Accesses = getOrCreateAccessList(&B); @@ -271,7 +267,7 @@ MemorySSAWalker *MemorySSA::buildMemorySSA(AliasAnalysis *AA, } if (InsertIntoDef) DefiningBlocks.insert(&B); - if (InsertIntoDefUse) + if (Accesses) DefUseBlocks.insert(&B); } -- cgit v1.2.3