Rebuilding the cfg
Ian Lance Taylor
iant@google.com
Fri Sep 10 15:53:00 GMT 2010
Richard Guenther <richard.guenther@gmail.com> writes:
> On Fri, Sep 10, 2010 at 5:39 PM, Paulo J. Matos <pocmatos@gmail.com> wrote:
>> Hello,
>>
>> On my frontend pass, I am dealing with basic blocks and I am for:
>> ,----
>> | int f(int n)
>> | {
>> | switch(n)
>> | {
>> | case 0: f1("0"); break;
>> | case 500: f2("500"); break;
>> | case 1000: f3("1000"); break;
>> | default: d(); break;
>> | }
>> | }
>> `----
>>
>> transforming it into:
>> ,----
>> | int f(int n)
>> | {
>> | if(n < 500)
>> | if(n == 0)
>> | f1("0");
>> | else
>> | goto def;
>> | else
>> | if(n == 500)
>> | f2("500");
>> | else
>> | if(n == 1000)
>> | f3("1000");
>> | else
>> | goto def;
>> |
>> | return;
>> |
>> | def:
>> | d();
>> | return;
>> | }
>> `----
>>
>> The problem with this is that it contains nested ifs.
>> Is there a way for me to insert this tree and ask GCC to rebuild the CFG
>> or I need to build the correct CFG manually?
>
> You need to build it manually.
Can't he just call find_many_sub_basic_blocks?
Ian
More information about the Gcc
mailing list