mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[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
This commit is contained in:
parent
4e2e1fe44b
commit
d100299e59
@ -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);
|
||||
|
33
test/Analysis/MemorySSA/pr43320.ll
Normal file
33
test/Analysis/MemorySSA/pr43320.ll
Normal file
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user