[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