77
|
1 ; RUN: llc < %s -march=sparc -relocation-model=static | FileCheck -check-prefix=V8ABS %s
|
|
2 ; RUN: llc < %s -march=sparc -relocation-model=pic | FileCheck -check-prefix=V8PIC %s
|
|
3 ; RUN: llc < %s -march=sparcv9 -relocation-model=static | FileCheck -check-prefix=V9ABS %s
|
|
4 ; RUN: llc < %s -march=sparcv9 -relocation-model=pic | FileCheck -check-prefix=V9PIC %s
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 %struct.__fundamental_type_info_pseudo = type { %struct.__type_info_pseudo }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 %struct.__type_info_pseudo = type { i8*, i8* }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 @_ZTIi = external constant %struct.__fundamental_type_info_pseudo
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 @_ZTIf = external constant %struct.__fundamental_type_info_pseudo
|
77
|
12 @.cst = private unnamed_addr constant [12 x i8] c"catched int\00", align 64
|
|
13 @.cst1 = private unnamed_addr constant [14 x i8] c"catched float\00", align 64
|
|
14
|
|
15 ; V8ABS-LABEL: main:
|
|
16 ; V8ABS: .cfi_startproc
|
|
17 ; V8ABS: .cfi_personality 0, __gxx_personality_v0
|
|
18 ; V8ABS: .cfi_lsda 0,
|
|
19 ; V8ABS: .cfi_def_cfa_register {{30|%fp}}
|
|
20 ; V8ABS: .cfi_window_save
|
|
21 ; V8ABS: .cfi_register 15, 31
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22
|
77
|
23 ; V8ABS: call __cxa_throw
|
|
24 ; V8ABS: call __cxa_throw
|
|
25
|
|
26 ; V8ABS: call __cxa_begin_catch
|
|
27 ; V8ABS: call __cxa_end_catch
|
|
28
|
|
29 ; V8ABS: call __cxa_begin_catch
|
|
30 ; V8ABS: call __cxa_end_catch
|
|
31
|
|
32 ; V8ABS: .cfi_endproc
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33
|
77
|
34 ; V8PIC-LABEL: main:
|
|
35 ; V8PIC: .cfi_startproc
|
|
36 ; V8PIC: .cfi_personality 155, DW.ref.__gxx_personality_v0
|
|
37 ; V8PIC: .cfi_lsda 27,
|
|
38 ; V8PIC: .cfi_def_cfa_register {{30|%fp}}
|
|
39 ; V8PIC: .cfi_window_save
|
|
40 ; V8PIC: .cfi_register 15, 31
|
|
41 ; V8PIC: .section .gcc_except_table
|
|
42 ; V8PIC-NOT: .section
|
|
43 ; V8PIC: .word %r_disp32(.L_ZTIi.DW.stub)
|
|
44 ; V8PIC: .data
|
|
45 ; V8PIC: .L_ZTIi.DW.stub:
|
|
46 ; V8PIC-NEXT: .word _ZTIi
|
|
47
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48
|
77
|
49 ; V9ABS-LABEL: main:
|
|
50 ; V9ABS: .cfi_startproc
|
|
51 ; V9ABS: .cfi_personality 0, __gxx_personality_v0
|
|
52 ; V9ABS: .cfi_lsda 27,
|
|
53 ; V9ABS: .cfi_def_cfa_register {{30|%fp}}
|
|
54 ; V9ABS: .cfi_window_save
|
|
55 ; V9ABS: .cfi_register 15, 31
|
|
56 ; V9ABS: .section .gcc_except_table
|
|
57 ; V9ABS-NOT: .section
|
|
58 ; V9ABS: .xword _ZTIi
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59
|
77
|
60 ; V9PIC-LABEL: main:
|
|
61 ; V9PIC: .cfi_startproc
|
|
62 ; V9PIC: .cfi_personality 155, DW.ref.__gxx_personality_v0
|
|
63 ; V9PIC: .cfi_lsda 27,
|
|
64 ; V9PIC: .cfi_def_cfa_register {{30|%fp}}
|
|
65 ; V9PIC: .cfi_window_save
|
|
66 ; V9PIC: .cfi_register 15, 31
|
|
67 ; V9PIC: .section .gcc_except_table
|
|
68 ; V9PIC-NOT: .section
|
|
69 ; V9PIC: .word %r_disp32(.L_ZTIi.DW.stub)
|
|
70 ; V9PIC: .data
|
|
71 ; V9PIC: .L_ZTIi.DW.stub:
|
|
72 ; V9PIC-NEXT: .xword _ZTIi
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73
|
95
|
74 define i32 @main(i32 %argc, i8** nocapture readnone %argv) unnamed_addr #0 personality i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0 {
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 entry:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 %0 = icmp eq i32 %argc, 2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 %1 = tail call i8* @__cxa_allocate_exception(i32 4) #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 br i1 %0, label %"3", label %"4"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 "3": ; preds = %entry
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 %2 = bitcast i8* %1 to i32*
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 store i32 0, i32* %2, align 4
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 invoke void @__cxa_throw(i8* %1, i8* bitcast (%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*), void (i8*)* null) #2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 to label %3 unwind label %"8"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 ; <label>:3 ; preds = %"3"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 unreachable
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 "4": ; preds = %entry
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 %4 = bitcast i8* %1 to float*
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 store float 1.000000e+00, float* %4, align 4
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 invoke void @__cxa_throw(i8* %1, i8* bitcast (%struct.__fundamental_type_info_pseudo* @_ZTIf to i8*), void (i8*)* null) #2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 to label %5 unwind label %"8"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 ; <label>:5 ; preds = %"4"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 unreachable
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 "5": ; preds = %"13", %"11"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 %6 = phi i32 [ 2, %"13" ], [ 0, %"11" ]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 ret i32 %6
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 "8": ; preds = %"4", %"3"
|
95
|
105 %exc = landingpad { i8*, i32 }
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 catch %struct.__fundamental_type_info_pseudo* @_ZTIi
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 catch %struct.__fundamental_type_info_pseudo* @_ZTIf
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 %exc_ptr12 = extractvalue { i8*, i32 } %exc, 0
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 %filter13 = extractvalue { i8*, i32 } %exc, 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 %typeid = tail call i32 @llvm.eh.typeid.for(i8* bitcast (%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*))
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 %7 = icmp eq i32 %filter13, %typeid
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 br i1 %7, label %"11", label %8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 ; <label>:8 ; preds = %"8"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 %typeid8 = tail call i32 @llvm.eh.typeid.for(i8* bitcast (%struct.__fundamental_type_info_pseudo* @_ZTIf to i8*))
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 %9 = icmp eq i32 %filter13, %typeid8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 br i1 %9, label %"13", label %"9"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 "9": ; preds = %8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 resume { i8*, i32 } %exc
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 "11": ; preds = %"8"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 %10 = tail call i8* @__cxa_begin_catch(i8* %exc_ptr12) #1
|
95
|
124 %11 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.cst, i32 0, i32 0))
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 tail call void @__cxa_end_catch() #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 br label %"5"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 "13": ; preds = %8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 %12 = tail call i8* @__cxa_begin_catch(i8* %exc_ptr12) #1
|
95
|
130 %13 = tail call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.cst1, i32 0, i32 0))
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 tail call void @__cxa_end_catch() #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 br label %"5"
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 ; Function Attrs: nounwind
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 declare i8* @__cxa_allocate_exception(i32) #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 ; Function Attrs: noreturn
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 declare void @__cxa_throw(i8*, i8*, void (i8*)*) #2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 declare void @__cxa_end_catch()
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 ; Function Attrs: nounwind readnone
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 declare i32 @llvm.eh.typeid.for(i8*) #3
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 ; Function Attrs: nounwind
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 declare i8* @__cxa_begin_catch(i8*) #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 ; Function Attrs: nounwind
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 declare i32 @puts(i8* nocapture readonly) #1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 attributes #0 = { "no-frame-pointer-elim-non-leaf"="false" }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 attributes #1 = { nounwind }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 attributes #2 = { noreturn }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 attributes #3 = { nounwind readnone }
|