mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
f4887d90a6
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
41 lines
919 B
LLVM
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
|