@@ -50,44 +50,51 @@ module @"try-catch.cpp" attributes {cir.lang = #cir.lang<cxx>, cir.sob = #cir.si
50
50
// LLVM: catch ptr @_ZTIi
51
51
// LLVM: catch ptr @_ZTIPKc
52
52
%exception_ptr, %type_id = cir.eh.inflight_exception [@_ZTIi, @_ZTIPKc]
53
- // LLVM: extractvalue { ptr, i32 } %[[EHINFO]], 0, !dbg !29
54
- // LLVM: extractvalue { ptr, i32 } %[[EHINFO]], 1, !dbg !29
53
+ // LLVM: extractvalue { ptr, i32 } %[[EHINFO]], 0
54
+ // LLVM: extractvalue { ptr, i32 } %[[EHINFO]], 1
55
55
cir.br ^bb5(%exception_ptr, %type_id : !cir.ptr<!void>, !u32i)
56
56
^bb5(%16: !cir.ptr<!void>, %17: !u32i):
57
57
%18 = cir.eh.typeid @_ZTIi
58
58
// LLVM: call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIi)
59
59
%19 = cir.cmp(eq, %17, %18) : !u32i, !cir.bool
60
+ cir.brcond %19 ^bb6(%16 : !cir.ptr<!void>), ^bb7(%16, %17 : !cir.ptr<!void>, !u32i)
61
+ ^bb6(%20: !cir.ptr<!void>):
62
+ %21 = cir.catch_param begin %20 -> !cir.ptr<!s32i>
63
+ // LLVM: %[[EH_IDX:.*]] = phi ptr
64
+ // LLVM: call ptr @__cxa_begin_catch(ptr %[[EH_IDX]])
65
+ %22 = cir.load %21 : !cir.ptr<!s32i>, !s32i
66
+ cir.store %22, %7 : !s32i, !cir.ptr<!s32i>
67
+ %23 = cir.const #cir.int<98> : !s32i
68
+ %24 = cir.cast(integral, %23 : !s32i), !u64i
69
+ cir.store %24, %3 : !u64i, !cir.ptr<!u64i>
70
+ %25 = cir.load %7 : !cir.ptr<!s32i>, !s32i
71
+ %26 = cir.unary(inc, %25) : !s32i, !s32i
72
+ cir.store %26, %7 : !s32i, !cir.ptr<!s32i>
73
+ cir.catch_param end
74
+ // LLVM: call void @__cxa_end_catch()
60
75
cir.br ^bb10
61
- // TODO: TBD
62
- // cir.brcond %19 ^bb6(%16 : !cir.ptr<!void>), ^bb7(%16, %17 : !cir.ptr<!void>, !u32i)
63
- // ^bb6(%20: !cir.ptr<!void>):
64
- // %21 = cir.catch_param begin %20 -> !cir.ptr<!s32i>
65
- // %22 = cir.load %21 : !cir.ptr<!s32i>, !s32i
66
- // cir.store %22, %7 : !s32i, !cir.ptr<!s32i>
67
- // %23 = cir.const #cir.int<98> : !s32i
68
- // %24 = cir.cast(integral, %23 : !s32i), !u64i
69
- // cir.store %24, %3 : !u64i, !cir.ptr<!u64i>
70
- // %25 = cir.load %7 : !cir.ptr<!s32i>, !s32i
71
- // %26 = cir.unary(inc, %25) : !s32i, !s32i
72
- // cir.store %26, %7 : !s32i, !cir.ptr<!s32i>
73
- // cir.catch_param end
74
- // cir.br ^bb10
75
- // ^bb7(%27: !cir.ptr<!void>, %28: !u32i):
76
- // %29 = cir.eh.typeid @_ZTIPKc
77
- // %30 = cir.cmp(eq, %28, %29) : !u32i, !cir.bool
78
- // cir.brcond %30 ^bb8(%27 : !cir.ptr<!void>), ^bb9(%27, %28 : !cir.ptr<!void>, !u32i)
79
- // ^bb8(%31: !cir.ptr<!void>):
80
- // %32 = cir.catch_param begin %31 -> !cir.ptr<!s8i>
81
- // cir.store %32, %6 : !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>
82
- // %33 = cir.const #cir.int<99> : !s32i
83
- // %34 = cir.cast(integral, %33 : !s32i), !u64i
84
- // cir.store %34, %3 : !u64i, !cir.ptr<!u64i>
85
- // %35 = cir.load %6 : !cir.ptr<!cir.ptr<!s8i>>, !cir.ptr<!s8i>
86
- // %36 = cir.const #cir.int<0> : !s32i
87
- // %37 = cir.ptr_stride(%35 : !cir.ptr<!s8i>, %36 : !s32i), !cir.ptr<!s8i>
88
- // cir.catch_param end
89
- // cir.br ^bb10
90
- // ^bb9(%38: !cir.ptr<!void>, %39: !u32i):
76
+ ^bb7(%27: !cir.ptr<!void>, %28: !u32i):
77
+ %29 = cir.eh.typeid @_ZTIPKc
78
+ // LLVM: call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIPKc)
79
+ %30 = cir.cmp(eq, %28, %29) : !u32i, !cir.bool
80
+ cir.brcond %30 ^bb8(%27 : !cir.ptr<!void>), ^bb9(%27, %28 : !cir.ptr<!void>, !u32i)
81
+ ^bb8(%31: !cir.ptr<!void>):
82
+ %32 = cir.catch_param begin %31 -> !cir.ptr<!s8i>
83
+ // LLVM: %[[EH_MSG:.*]] = phi ptr
84
+ // LLVM: call ptr @__cxa_begin_catch(ptr %[[EH_MSG]])
85
+ cir.store %32, %6 : !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>
86
+ %33 = cir.const #cir.int<99> : !s32i
87
+ %34 = cir.cast(integral, %33 : !s32i), !u64i
88
+ cir.store %34, %3 : !u64i, !cir.ptr<!u64i>
89
+ %35 = cir.load %6 : !cir.ptr<!cir.ptr<!s8i>>, !cir.ptr<!s8i>
90
+ %36 = cir.const #cir.int<0> : !s32i
91
+ %37 = cir.ptr_stride(%35 : !cir.ptr<!s8i>, %36 : !s32i), !cir.ptr<!s8i>
92
+ cir.catch_param end
93
+ // LLVM: call void @__cxa_end_catch()
94
+ cir.br ^bb10
95
+ ^bb9(%38: !cir.ptr<!void>, %39: !u32i):
96
+ cir.br ^bb10
97
+ // TODO: support resume.
91
98
// cir.resume
92
99
^bb10:
93
100
%40 = cir.load %3 : !cir.ptr<!u64i>, !u64i
0 commit comments