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...