search for: exc_ptr

Displaying 7 results from an estimated 7 matches for "exc_ptr".

2010 Dec 02
2
[LLVMdev] Alternative exception handling proposal
.... define void @_Z1bv() { entry: invoke void @_Z1av() to label %return unwind label %"<L1>" personality @__gxx_personality_v0 catches %struct.__fundamental_type_info_pseudo* @_ZTIi "<L1>": ; preds = %entry %exc_ptr = tail call i8* @llvm.eh.exception() %filter = tail call i32 @llvm.eh.selector() %typeid = tail call i32 @llvm.eh.typeid.for(i8* bitcast (%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*)) %0 = icmp eq i32 %filter, %typeid br i1 %0, label %"<L2>", label %"<...
2010 Dec 01
0
[LLVMdev] Alternative exception handling proposal
On Dec 1, 2010, at 1:37 PM, Duncan Sands wrote: > Inlining > -------- > > Many a plausible seeming exception handling scheme has fallen by the way-side > because it interacts poorly with inlining. > > Here is how inlining would work with this scheme. It's pretty close to how > it works right now. Suppose you have > > invoke void @foo() > to
2010 Dec 06
4
[LLVMdev] Inlining and exception handling in LLVM and GCC
...ntal_type_info_pseudo* @_ZTIi to i8*), void (i8*)* null) noreturn ; <= Call "throw" to label %invcont unwind label %rewind invcont: ; preds = %entry unreachable rewind: ; preds = %entry %exc_ptr = call i8* @llvm.eh.exception() %filter = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exc_ptr, i8* bitcast (i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0 to i8*), i32 0) ; <= i32 0 means that we are running a cleanup call void @_ZN1XD2Ev(%struct.X* %memtmp) inlinehint ; <= Run...
2010 Dec 01
8
[LLVMdev] Alternative exception handling proposal
...ct.A* %memtmp2) to label %return unwind label %lpad personality @__gxx_personality_v0 catches %struct.__fundamental_type_info_pseudo* @_ZTIi, %struct.__pointer_type_info_pseudo* @_ZTIPKc, i8* null "10": ; preds = %"5" %exc_ptr31 = call i8* @llvm.eh.exception() %filter32 = call i32 @llvm.eh.selector() invoke void @_ZN1CD1Ev(%struct.A* %memtmp) to label %"11" unwind label %fail personality @__gxx_personality_v0 catches i32 1 ; <- this is an empty filter, i.e. one that catches everything lpad...
2010 Dec 03
1
[LLVMdev] Alternative exception handling proposal
...@__gxx_personality_v0 catches %struct.__pointer_type_info_pseudo* @_ZTIPSt9exception ; <label>:1 ; preds = %"<bb 3>" unreachable "<L1>": ; preds = %"<L3>" %exc_ptr2 = tail call i8* @llvm.eh.exception() %filter3 = tail call i32 @llvm.eh.selector() tail call void @__cxa_end_catch() nounwind br label %rewind "<L2>": ; preds = %"<bb 3>", %entry %exc_ptr = tail call i8* @llvm.eh...
2010 Dec 02
0
[LLVMdev] Alternative exception handling proposal
...You miss the point. As you well know, we need to know the specific type that is used for a catchall. E.g., i8* null in C++ and a global variable in Ada. In your code above, the i8* null is indistinguishable from the other types. >>> "10": ; preds = %"5" >>> %exc_ptr31 = call i8* @llvm.eh.exception() >>> %filter32 = call i32 @llvm.eh.selector() >>> invoke void @_ZN1CD1Ev(%struct.A* %memtmp) >>> to label %"11" unwind label %fail personality @__gxx_personality_v0 >>> catches i32 1 ; <- this is an empty filter, i.e....
2010 Dec 02
3
[LLVMdev] Alternative exception handling proposal
...} In my proposal you don't need to know about catch-all, add special catch-alls etc. If there was a catch-all in the original code then there is one on the invoke, otherwise there is not. There is no special treatment of catch-all. >> "10": ; preds = %"5" >> %exc_ptr31 = call i8* @llvm.eh.exception() >> %filter32 = call i32 @llvm.eh.selector() >> invoke void @_ZN1CD1Ev(%struct.A* %memtmp) >> to label %"11" unwind label %fail personality @__gxx_personality_v0 >> catches i32 1 ; <- this is an empty filter, i.e. one that catche...