diff options
author | Alina Sbirlea <asbirlea@google.com> | 2019-09-17 16:33:35 +0000 |
---|---|---|
committer | Alina Sbirlea <asbirlea@google.com> | 2019-09-17 16:33:35 +0000 |
commit | 4e9082ef95db5d760df4cce00a4351fa122176d6 (patch) | |
tree | 3877aeaae23bdc752e2346e0d1c33303c0c69628 | |
parent | 6b2d1346d8ed4c47fb61a249e0bb246dc9731144 (diff) | |
download | bcm5719-llvm-4e9082ef95db5d760df4cce00a4351fa122176d6.tar.gz bcm5719-llvm-4e9082ef95db5d760df4cce00a4351fa122176d6.zip |
[MemorySSA] Fix phi insertion when inserting a def.
Summary:
When inserting a Def, the current algorithm is walking edges backward
and inserting new Phis where needed. There may be additional Phis needed
in the IDF of the newly inserted Def and Phis.
Adding Phis in the IDF of the Def was added ina previous patch, but we
may also need other Phis in the IDF of the newly added Phis.
Reviewers: george.burgess.iv
Subscribers: Prazek, sanjoy.google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67637
llvm-svn: 372138
-rw-r--r-- | llvm/lib/Analysis/MemorySSAUpdater.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Analysis/MemorySSA/pr43320.ll | 33 |
2 files changed, 36 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/MemorySSAUpdater.cpp b/llvm/lib/Analysis/MemorySSAUpdater.cpp index b29be09bda7..94417dc551a 100644 --- a/llvm/lib/Analysis/MemorySSAUpdater.cpp +++ b/llvm/lib/Analysis/MemorySSAUpdater.cpp @@ -339,6 +339,9 @@ void MemorySSAUpdater::insertDef(MemoryDef *MD, bool RenameUses) { ForwardIDFCalculator IDFs(*MSSA->DT); SmallVector<BasicBlock *, 32> IDFBlocks; SmallPtrSet<BasicBlock *, 2> DefiningBlocks; + for (const auto &VH : InsertedPHIs) + if (const auto *RealPHI = cast_or_null<MemoryPhi>(VH)) + DefiningBlocks.insert(RealPHI->getBlock()); DefiningBlocks.insert(MD->getBlock()); IDFs.setDefiningBlocks(DefiningBlocks); IDFs.calculate(IDFBlocks); diff --git a/llvm/test/Analysis/MemorySSA/pr43320.ll b/llvm/test/Analysis/MemorySSA/pr43320.ll new file mode 100644 index 00000000000..6aca3f9eeb1 --- /dev/null +++ b/llvm/test/Analysis/MemorySSA/pr43320.ll @@ -0,0 +1,33 @@ +; RUN: opt -licm -enable-mssa-loop-dependency -verify-memoryssa -S < %s | FileCheck %s +; REQUIRES: asserts + +target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" +target triple = "aarch64-unknown-none-eabi" + +; CHECK-LABEL: @e() +define void @e() { +entry: + br label %g + +g: ; preds = %cleanup, %entry + %0 = load i32, i32* null, align 4 + %and = and i32 %0, undef + store i32 %and, i32* null, align 4 + br i1 undef, label %if.end8, label %if.then + +if.then: ; preds = %g + br i1 undef, label %k, label %cleanup + +k: ; preds = %if.end8, %if.then + br i1 undef, label %if.end8, label %cleanup + +if.end8: ; preds = %k, %g + br i1 undef, label %for.cond.preheader, label %k + +for.cond.preheader: ; preds = %if.end8 + unreachable + +cleanup: ; preds = %k, %if.then + br label %g +} + |