[LLVMdev] unwinds to in the CFG
Dale Johannesen
dalej at apple.com
Fri Apr 4 10:30:23 PDT 2008
I'm chasing a wrong-codegen bug that looks very much like this, except
that I do not have a second call to foo; I have %x being referenced in
the
unwinding code, where it hasn't been set. Was there a resolution for
this?
On Apr 3, 2008, at 10:58 AM, Duncan Sands wrote:
> Hi Devang,
>>> Just as a quick recap the problem I encountered is how to deal
>>> instructions in a block being used as operands in the unwind dest.
>>> Such
>>> as this:
>>>
>>> bb1: unwinds to %cleanup
>>> call void @foo() ; might throw, might not
>>> %x = add i32 %y, %z
>>> call void @foo() ; might throw, might not
>>> ret void
>>> cleanup:
>>> call void @use(i32 %x)
>>>
>>> The problem is that %x might not have been executed before we enter
>>> %cleanup.
>>
>> This means bb1 has multiple exit points, which defeats the "single
>> entry, single exit" idea. Did I miss anything here ?
>
> you are correct, this fundamental property of basic blocks is being
> discarded. Very nasty! This is why I argued against this approach
> in favour of the mini-basic-blocks approach, in which you have lots
> of basic blocks which under the hood share common info to reduce
> memory
> usage. However Chris convinced me that in fact not that many places
> really use that there is a single exit, and that only a wimpy quiche
> eater would shrink at the idea of auditing all of LLVM! :)
>
> Ciao,
>
> Duncan.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list