On Fri, Sep 10, 2010 at 5:39 PM, Paulo J. Matos <pocma...@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.

Richard.

> Cheers,
> --
> PMatos
>
>

Reply via email to