[llvm] r372138 - [MemorySSA] Fix phi insertion when inserting a def.

Alina Sbirlea via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 17 09:33:35 PDT 2019


Author: asbirlea
Date: Tue Sep 17 09:33:35 2019
New Revision: 372138

URL: http://llvm.org/viewvc/llvm-project?rev=372138&view=rev
Log:
[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

Added:
    llvm/trunk/test/Analysis/MemorySSA/pr43320.ll
Modified:
    llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp

Modified: llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp?rev=372138&r1=372137&r2=372138&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp (original)
+++ llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp Tue Sep 17 09:33:35 2019
@@ -339,6 +339,9 @@ void MemorySSAUpdater::insertDef(MemoryD
       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);

Added: llvm/trunk/test/Analysis/MemorySSA/pr43320.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/MemorySSA/pr43320.ll?rev=372138&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/MemorySSA/pr43320.ll (added)
+++ llvm/trunk/test/Analysis/MemorySSA/pr43320.ll Tue Sep 17 09:33:35 2019
@@ -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
+}
+




More information about the llvm-commits mailing list