1 ; RUN: opt -mtriple=x86_64-linux-gnu -dwarfehprepare < %s -S | FileCheck %s
3 ; Check basic functionality of IR-to-IR DWARF EH preparation. This should
4 ; eliminate resumes. This pass requires a TargetMachine, so we put it under X86
5 ; and provide an x86 triple.
7 @int_typeinfo = global i8 0
9 declare void @might_throw()
11 define i32 @simple_catch() {
12 invoke void @might_throw()
13 to label %cont unwind label %lpad
15 ; CHECK: define i32 @simple_catch()
16 ; CHECK: invoke void @might_throw()
24 %ehvals = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
25 catch i8* @int_typeinfo
26 %ehptr = extractvalue { i8*, i32 } %ehvals, 0
27 %ehsel = extractvalue { i8*, i32 } %ehvals, 1
28 %int_sel = call i32 @llvm.eh.typeid.for(i8* @int_typeinfo)
29 %int_match = icmp eq i32 %ehsel, %int_sel
30 br i1 %int_match, label %catch_int, label %eh.resume
33 ; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
34 ; CHECK: call i32 @llvm.eh.typeid.for
44 resume { i8*, i32 } %ehvals
47 ; CHECK: call void @_Unwind_Resume(i8* %{{.*}})
50 declare i32 @__gxx_personality_v0(...)
51 declare i32 @llvm.eh.typeid.for(i8*)