Displaying 7 results from an estimated 7 matches for "succ0".
Did you mean:
sicc0
2011 Aug 02
0
[LLVMdev] Multiple successors, single dynamic successor
...express such relationships in LLVM IR ("best" in the sense of allowing
> other optimizations to run effectively)? Bear in mind that in this
> example N=2, but it may be way bigger than that.
Just to clarify: I already figured out two ways to do it, i.e.:
%0 = phi i8* [blockaddr(%succ0), %pred0], [blockaddr(%succ1), %pred1],
...
...
indirectbr %0, [%succ0, %succ1, ...]
or
%0 = phi i8 [0, %pred0], [1, %pred1], ...
...
switch %0, undef, [0, %succ0], [1, %succ1], ...
what I'd like to know is which one do you think is better (and why) or
if there are better ways I didn't...
2010 Nov 24
2
[LLVMdev] RFC: Exception Handling Proposal II
...on. So in my model, there is also one dispatch per region, but there are more regions.
So, in this example:
A { A(); ~A() throw(); };
void foo() throw() {
A x;
b();
}
Your model has this as follows, modulo syntax:
entry:
%x = alloca %A
invoke void @A::A(%A* %x) to label %succ0 unwind label %lp0 region 0
succ0:
invoke void @b() to label %succ1 unwind label %lp1 region 0
succ1:
call void @A::~A(%A* %x) nounwind
ret void
lp0:
call void @A::~A(%A* %x) nounwind
br label %lp1
lp1:
dispatch region 0 [filter i8* null] # no resume edge
Whereas...
2010 Nov 25
0
[LLVMdev] RFC: Exception Handling Proposal II
...region, but there are more regions.
>
> So, in this example:
> A { A(); ~A() throw(); };
> void foo() throw() {
> A x;
> b();
> }
>
> Your model has this as follows, modulo syntax:
> entry:
> %x = alloca %A
> invoke void @A::A(%A* %x) to label %succ0 unwind label %lp0 region 0
> succ0:
> invoke void @b() to label %succ1 unwind label %lp1 region 0
> succ1:
> call void @A::~A(%A* %x) nounwind
> ret void
> lp0:
> call void @A::~A(%A* %x) nounwind
> br label %lp1
> lp1:
> dispatch region 0 [filter...
2011 Aug 02
3
[LLVMdev] Multiple successors, single dynamic successor
Nella citazione martedì 2 agosto 2011 20:02:08, Michael Ilseman ha
scritto:
> I'm assuming that you're talking about a situation where this can't be
> determined statically in the existing LLVM IR, but you know it's true
> and want to put it in (e.g. you're the one generating LLVM IR).
Correct. Or, more precisely, I'd like to investigate macro compression,
i.e.
2010 Nov 24
0
[LLVMdev] RFC: Exception Handling Proposal II
On Nov 24, 2010, at 4:58 AM, John McCall wrote:
>> If that's so, how do you encode which which landing pad is to be
>> followed per region?
>>
>> Consider the following code:
>>
>> try {
>> Foo f();
>> f.run(); // can throw exception
>> Bar b();
>> b.run(); // can throw exception
>> Baz z();
>> z.run(); // can throw
2010 Nov 24
3
[LLVMdev] RFC: Exception Handling Proposal II
On Nov 24, 2010, at 2:59 AM, Renato Golin wrote:
> If I got it right, the dispatch instruction will tell the
> instructions/calls to unwind to specific landing pads (cleanup areas,
> terminate), but the region number will encode try/catch areas, so that
> all those cleanup landing pads should ultimately end up in the catch
> area for that region.
Caveat: I'm speaking from what
2010 Nov 25
3
[LLVMdev] RFC: Exception Handling Proposal II
...>
>> So, in this example:
>> A { A(); ~A() throw(); };
>> void foo() throw() {
>> A x;
>> b();
>> }
>>
>> Your model has this as follows, modulo syntax:
>> entry:
>> %x = alloca %A
>> invoke void @A::A(%A* %x) to label %succ0 unwind label %lp0 region 0
>> succ0:
>> invoke void @b() to label %succ1 unwind label %lp1 region 0
>> succ1:
>> call void @A::~A(%A* %x) nounwind
>> ret void
>> lp0:
>> call void @A::~A(%A* %x) nounwind
>> br label %lp1
>> lp1:
>&g...