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