1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +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:
Alina Sbirlea 2019-09-17 16:33:35 +00:00
parent 4e2e1fe44b
commit d100299e59
2 changed files with 36 additions and 0 deletions

View File

@ -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);

View 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
}