[Mono-devel-list] Removal of critical edges

Massimiliano Mantione massi at ximian.com
Wed Nov 17 08:24:56 EST 2004

On Wed, 2004-11-17 at 03:50, Ben Maurer wrote:
> +//					new_bb->real_offset = bb->real_offset;
> It looks like this code is not used after we read the IL code. So, probably not needed.

OK, I leave it commented.

> +//					new_bb->region = bb->region;
> region should == 0 in the code that you are doing, because you do not
> handle exception clauses.

Yes, but suppose I did (or suppose in the future we will)...
what should I put in the region field then?

> +//						jump->cil_code = bb->cil_code;
> This is probably needed for debugging. But am not sure.

OK, I'll uncomment it.

> Did you try make bootstrap on a clean tree? I often catch more errors
> this way.

Well, thanks... I tried this morning, and it *did* catch one more
problem... thanks also to Paolo for telling me about OP_CALL_HANDLER
instructions on IRC.
The new attached patch is able to do a clean bootstrap.

Any comments on why we have methods containing OP_CALL_HANDLER and
with SSA still enabled?

> I think you need to maintain cfg->bblocks.

Well, actually I do... in my patch it is allocated *after* I call
This works because optimize_branches does not use it, so it can
safely be called *before* remove_critical_edges (which saved me the
trouble of modifying optimize_branches to be able to not introduce
critical edges in its transformations...).

Thanks a lot for the input!


-------------- next part --------------
A non-text attachment was scrubbed...
Name: critical-edges-removal.patch
Type: text/x-patch
Size: 5059 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20041117/016f3b17/attachment.bin 

More information about the Mono-devel-list mailing list