[Mono-devel-list] SSA and try/catch/finally regions
Zoltan Varga
vargaz at gmail.com
Mon Apr 4 08:28:47 EDT 2005
Hi,
A simpler solution would be to mark those variables used in
catch/finally blocks as volatile.
This is already done.
Zoltan
On Apr 4, 2005 1:43 PM, Massimiliano Mantione <massi at ximian.com> wrote:
>
> I'm going to do some work in the SSA construction code, so that
> we will have proper SSA "versions" to represent field accesses.
>
> While working on that code, I thought it would be nice to enable
> SSA also when we currently cannot do it.
>
> Now we disable SSA for the following reasons:
> - Aliasing risks (the address of a local has been taken)
> - try/catch/finally regions
>
> The first issue is addressed by alias analysis, which (in a
> limited form, but enough for this purpose) is already done.
>
> The second one is related to the fact that try and catch/finally
> blocks currently are not properly connected in the CFG.
> But the real issue is not just how to connect the blocks, but how
> to take into account the fact that when we reach a catch/finally
> region the value of some variable is unpredictable.
>
> I explain with a simple example:
>
> int v = 0;
> try {
> v = 1;
> DoSomething ();
> v = 2;
> DoSomeMore ();
> v = 3;
> DoEvenMore ();
> } finally {
> Console.WriteLine (v);
> }
>
> Here, the value of 'v' in the finally BB depends from which of the
> "Do..." methods (eventually) throws an exception.
> So, simply connecting the try BB to the finally BB in the CFG (and,
> by the way, also the finally BB to its "next" BB, which we now don't
> do!) is not enough.
>
> My idea is to use a sequence of OP_DUMMY_STORE instructions at the
> beginning of catch/finally regions, one for each variable that is
> assigned in the corresponding try region (and is actually used in
> the catch/finally region, of course).
>
> The complexity of doing this is low, and I think I can easily embed
> this kind of scanning in the alias analysis pass (which already does
> a full pass on the whole compiled method, looking for all load and
> store instructions).
> Maybe handling nested try regions will give me some trouble, but in
> the end it should be easy...
>
> In this way SSA would know that those variables have an unknown
> value in those blocks.
>
> Do you think this is a reasonable approach?
>
> Ciao,
> Massi
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
More information about the Mono-devel-list
mailing list