[llvm] r374447 - [MemorySSA] Additional handling of unreachable blocks.

Alina Sbirlea via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 10 13:43:06 PDT 2019


Author: asbirlea
Date: Thu Oct 10 13:43:06 2019
New Revision: 374447

URL: http://llvm.org/viewvc/llvm-project?rev=374447&view=rev
Log:
[MemorySSA] Additional handling of unreachable blocks.

Summary:
Whenever we get the previous definition, the assumption is that the
recursion starts ina  reachable block.
If the recursion starts in an unreachable block, we may recurse
indefinitely. Handle this case by returning LoE if the block is
unreachable.

Resolves PR43426.

Reviewers: george.burgess.iv

Subscribers: Prazek, sanjoy.google, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68809

Added:
    llvm/trunk/test/Analysis/MemorySSA/pr43426.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=374447&r1=374446&r2=374447&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp (original)
+++ llvm/trunk/lib/Analysis/MemorySSAUpdater.cpp Thu Oct 10 13:43:06 2019
@@ -48,6 +48,10 @@ MemoryAccess *MemorySSAUpdater::getPrevi
     return Cached->second;
   }
 
+  // If this method is called from an unreachable block, return LoE.
+  if (!MSSA->DT->isReachableFromEntry(BB))
+    return MSSA->getLiveOnEntryDef();
+
   if (BasicBlock *Pred = BB->getSinglePredecessor()) {
     // Single predecessor case, just recurse, we can only have one definition.
     MemoryAccess *Result = getPreviousDefFromEnd(Pred, CachedPreviousDef);

Added: llvm/trunk/test/Analysis/MemorySSA/pr43426.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/MemorySSA/pr43426.ll?rev=374447&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/MemorySSA/pr43426.ll (added)
+++ llvm/trunk/test/Analysis/MemorySSA/pr43426.ll Thu Oct 10 13:43:06 2019
@@ -0,0 +1,40 @@
+; RUN: opt -licm -enable-mssa-loop-dependency -S %s | FileCheck %s
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-LABEL: @d()
+define dso_local void @d() {
+entry:
+  br label %header
+
+header:
+  store i32 1, i32* null, align 4
+  br i1 true, label %cleanup53, label %body
+
+body:
+  br i1 undef, label %cleanup31, label %for.cond11
+
+for.cond11: ; Needs branch as is
+  br i1 undef, label %unreachable, label %latch
+
+cleanup31:
+  br label %unreachable
+
+deadblock:
+  br i1 undef, label %unreachable, label %deadblock
+
+cleanup53:
+  %val = load i32, i32* null, align 4
+  %cmpv = icmp eq i32 %val, 0
+  br i1 %cmpv, label %cleanup63, label %latch
+
+latch:
+  br label %header
+
+cleanup63:
+  ret void
+
+unreachable:
+  unreachable
+}
+




More information about the llvm-commits mailing list