[PATCH] D67637: [MemorySSA] Fix phi insertion when inserting a def.
Alina Sbirlea via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 16 15:16:08 PDT 2019
asbirlea created this revision.
asbirlea added a reviewer: george.burgess.iv.
Herald added subscribers: sanjoy.google, Prazek.
Herald added a project: LLVM.
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.
Repository:
rL LLVM
https://reviews.llvm.org/D67637
Files:
lib/Analysis/MemorySSAUpdater.cpp
test/Analysis/MemorySSA/pr43320.ll
Index: test/Analysis/MemorySSA/pr43320.ll
===================================================================
--- /dev/null
+++ 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
+}
+
Index: lib/Analysis/MemorySSAUpdater.cpp
===================================================================
--- lib/Analysis/MemorySSAUpdater.cpp
+++ lib/Analysis/MemorySSAUpdater.cpp
@@ -339,6 +339,9 @@
ForwardIDFCalculator IDFs(*MSSA->DT);
SmallVector<BasicBlock *, 32> IDFBlocks;
SmallPtrSet<BasicBlock *, 2> DefiningBlocks;
+ for (auto &VH : InsertedPHIs)
+ if (auto *RealPHI = cast_or_null<MemoryPhi>(VH))
+ DefiningBlocks.insert(RealPHI->getBlock());
DefiningBlocks.insert(MD->getBlock());
IDFs.setDefiningBlocks(DefiningBlocks);
IDFs.calculate(IDFBlocks);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67637.220399.patch
Type: text/x-patch
Size: 1875 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190916/e137a732/attachment.bin>
More information about the llvm-commits
mailing list