Alina Sbirlea 67f0c5c085 [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

llvm-svn: 374447
2019-10-10 20:43:06 +00:00

41 lines
813 B
LLVM

; 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
}