mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-26 14:33:02 +02:00
cf7a7cf40d
It turns out we decide whether to use SjLj exceptions or some alternative in two separate places in the backend, and they disagreed with each other. This led to inconsistent code and is generally a terrible idea. So make them consistent and add an assert that they *do* match (unfortunately MCAsmInfo isn't available in opt, so it can't be used to initialise the CodeGen version directly). llvm-svn: 253502
33 lines
944 B
LLVM
33 lines
944 B
LLVM
; RUN: llc -mtriple=armv7-apple-ios -O0 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=armv7-apple-ios -O1 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=armv7-apple-ios -O2 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=armv7-apple-ios -O3 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=armv7k-apple-ios < %s | FileCheck %s
|
|
|
|
; SjLjEHPrepare shouldn't crash when lowering empty structs.
|
|
;
|
|
; Checks that between in case of empty structs used as arguments
|
|
; nothing happens, i.e. there are no instructions between
|
|
; __Unwind_SjLj_Register and actual @bar invocation
|
|
|
|
|
|
define i8* @foo(i8 %a, {} %c) personality i8* bitcast (i32 (...)* @baz to i8*) {
|
|
entry:
|
|
; CHECK: bl __Unwind_SjLj_Register
|
|
; CHECK-NEXT: {{[A-Z][a-zA-Z0-9]*}}:
|
|
; CHECK-NEXT: bl _bar
|
|
invoke void @bar ()
|
|
to label %unreachable unwind label %handler
|
|
|
|
unreachable:
|
|
unreachable
|
|
|
|
handler:
|
|
%tmp = landingpad { i8*, i32 }
|
|
cleanup
|
|
resume { i8*, i32 } undef
|
|
}
|
|
|
|
declare void @bar()
|
|
declare i32 @baz(...)
|