Dealing with basic blocks

Paulo J. Matos pocmatos@gmail.com
Tue Sep 14 14:14:00 GMT 2010


Richard Guenther <richard.guenther@gmail.com> writes:

> On Tue, Sep 14, 2010 at 11:08 AM, Paulo J. Matos <pocmatos@gmail.com> wrote:
>>
>> Hello all,
>>
>> I am moving basic blocks around and currently the cfg is getting very,
>> very awkward. My guess is that I am doing something I shouldn't [as
>> usual].
>>
>> For each SWITCH_EXPR I found on the code I generate a CFG which I have
>> to replace with the SWITCH_EXPR. The switch is always the last statement
>> on a basic block, so what I am doing is removing all the edges of the
>> current bb:
>>
>> VEC_truncate (edge, bsi.bb->succs, 0);
>
> You need to use remove_edge, don't mess with internal data structures
> directly.


Thanks, I am now doing:
,----
|     /* Remove all edges from the current bb */                                                                                                                                                               
|     for(ei = ei_start(bb->succs); (e = ei_safe_edge(ei)); ei_next(&ei))                                                                                                                                      
|         remove_edge(e);
`----

This is based on the comments for FOR_EACH_EDGE in basic_block.h.

-- 
PMatos



More information about the Gcc mailing list