mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Today a simple function that only catches exceptions and doesn't run destructor cleanups ends up containing a dead call to _Unwind_Resume (PR20300). We can't remove these dead resume instructions during normal optimization because inlining might introduce additional landingpads that do have cleanups to run. Instead we can do this during EH preparation, which is guaranteed to run after inlining. Fixes PR20300. Reviewers: majnemer Differential Revision: http://reviews.llvm.org/D7744 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229944 91177308-0d34-0410-b5e6-96231b3b80d8
54 lines
1.5 KiB
LLVM
54 lines
1.5 KiB
LLVM
; RUN: llc -mtriple x86_64-apple-darwin %s -o - | FileCheck %s --check-prefix=APPLE
|
|
; RUN: llc -mtriple x86_64-pc-windows-gnu %s -o - | FileCheck %s --check-prefix=MINGW64
|
|
; RUN: llc -mtriple i686-pc-windows-gnu %s -o - | FileCheck %s --check-prefix=MINGW32
|
|
@_ZTIi = external constant i8*
|
|
|
|
define i32 @main() uwtable optsize ssp {
|
|
; APPLE: .cfi_startproc
|
|
; APPLE: .cfi_personality 155, ___gxx_personality_v0
|
|
; APPLE: .cfi_lsda 16, Lexception0
|
|
; APPLE: .cfi_def_cfa_offset 16
|
|
; APPLE: callq __Unwind_Resume
|
|
; APPLE: .cfi_endproc
|
|
; APPLE: GCC_except_table0:
|
|
; APPLE: Lexception0:
|
|
|
|
; MINGW64: .seh_proc
|
|
; MINGW64: .seh_handler __gxx_personality_v0
|
|
; MINGW64: .seh_setframe 5, 32
|
|
; MINGW64: callq _Unwind_Resume
|
|
; MINGW64: .seh_handlerdata
|
|
; MINGW64: GCC_except_table0:
|
|
; MINGW64: Lexception0:
|
|
; MINGW64: .seh_endproc
|
|
|
|
; MINGW32: .cfi_startproc
|
|
; MINGW32: .cfi_personality 0, ___gxx_personality_v0
|
|
; MINGW32: .cfi_lsda 0, Lexception0
|
|
; MINGW32: .cfi_def_cfa_offset 8
|
|
; MINGW32: calll __Unwind_Resume
|
|
; MINGW32: .cfi_endproc
|
|
; MINGW32: GCC_except_table0:
|
|
; MINGW32: Lexception0:
|
|
|
|
entry:
|
|
invoke void @_Z1fv() optsize
|
|
to label %try.cont unwind label %lpad
|
|
|
|
lpad:
|
|
%0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
|
|
cleanup
|
|
catch i8* bitcast (i8** @_ZTIi to i8*)
|
|
br label %eh.resume
|
|
|
|
try.cont:
|
|
ret i32 0
|
|
|
|
eh.resume:
|
|
resume { i8*, i32 } %0
|
|
}
|
|
|
|
declare void @_Z1fv() optsize
|
|
|
|
declare i32 @__gxx_personality_v0(...)
|