OSDN Git Service

Update aosp/master LLVM for rebase to r230699.
[android-x86/external-llvm.git] / test / CodeGen / X86 / dwarf-eh-prepare.ll
1 ; RUN: opt -mtriple=x86_64-linux-gnu -dwarfehprepare < %s -S | FileCheck %s
2
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.
6
7 @int_typeinfo = global i8 0
8
9 declare void @might_throw()
10
11 define i32 @simple_catch() {
12   invoke void @might_throw()
13           to label %cont unwind label %lpad
14
15 ; CHECK: define i32 @simple_catch()
16 ; CHECK: invoke void @might_throw()
17
18 cont:
19   ret i32 0
20
21 ; CHECK: ret i32 0
22
23 lpad:
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
31
32 ; CHECK: lpad:
33 ; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
34 ; CHECK: call i32 @llvm.eh.typeid.for
35 ; CHECK: br i1
36
37 catch_int:
38   ret i32 1
39
40 ; CHECK: catch_int:
41 ; CHECK: ret i32 1
42
43 eh.resume:
44   resume { i8*, i32 } %ehvals
45
46 ; CHECK: eh.resume:
47 ; CHECK: call void @_Unwind_Resume(i8* %{{.*}})
48 }
49
50 declare i32 @__gxx_personality_v0(...)
51 declare i32 @llvm.eh.typeid.for(i8*)