1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/test/Transforms/SimplifyCFG/unreachable-cleanuppad.ll
David Majnemer f4887d90a6 [SimplifyCFG] Do not blindly remove unreachable blocks
DeleteDeadBlock was called indiscriminately, leading to cleanuprets with
undef cleanuppad references.

Instead, try to drain the BB of most of it's instructions if it is
unreachable.  We can then remove the BB if it solely consists of a
terminator (and maybe some phis).

llvm-svn: 261731
2016-02-24 10:02:16 +00:00

41 lines
919 B
LLVM

; RUN: opt -simplifycfg -S < %s | FileCheck %s
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i686-pc-win32"
declare i32 @__CxxFrameHandler3(...)
declare void @fn_2()
define void @fn_1(i1 %B) personality i32 (...)* @__CxxFrameHandler3 {
entry:
br i1 %B, label %__Ea.exit, label %lor.lhs.false.i.i
lor.lhs.false.i.i:
br i1 %B, label %if.end.i.i, label %__Ea.exit
if.end.i.i:
invoke void @fn_2()
to label %__Ea.exit unwind label %ehcleanup.i
ehcleanup.i:
%t4 = cleanuppad within none []
br label %arraydestroy.body.i
arraydestroy.body.i:
%gep = getelementptr i8, i8* null, i32 -1
br label %dtor.exit.i
dtor.exit.i:
br i1 %B, label %arraydestroy.done3.i, label %arraydestroy.body.i
arraydestroy.done3.i:
cleanupret from %t4 unwind to caller
__Ea.exit:
ret void
}
; CHECK-LABEL: define void @fn_1(
; CHECK-NEXT: entry:
; CHECK-NEXT: ret void