[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