Files
Alina Sbirlea c24f456857 [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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374447 91177308-0d34-0410-b5e6-96231b3b80d8
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
}