Re: [RFC] sparse SSA construction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 16, 2017 at 1:02 PM, Dibyendu Majumdar
<mobile@xxxxxxxxxxxxxxx> wrote:
>
> I am trying to understand above - why should there be a special
> treatment for gotos? A goto is simply a 'br' instruction from one BB
> to another, so is there something special about it?

Very good question!

It's related to 'structured programming' vs. non-structured programming.
If you write code which do control flow only by using if-then-else,
do-while/until, while-do and C's for-loop then you know very well
at each step where the code can come from, same during the linearization
here in sparse, you know when your write the IR for the if-then-else or the loop
what parent BB's you will have, you know that no other ones will need to be
added later.
Once you use gotos, it's not true anymore: if you have a label, then you
will probably have some gotos going to this label, in other words, new parents
for the BB. With computed gotos it's even worse: any computed-goto can
possibly go to any label you have taken the address (it's GCCism, not standard
C but we have to support it).

This is not a problem for the method, just a little complication as we have then
to delay a few things until we know all the gotos have been issued, then we know
that no new parents can be added (to the BB corresponding to a label) and things
can move on. It was just that the articles, for the sake of simplicity
I suppose,
superbly ignored the question of the gotos. So it was not as simple as taking
the pseudo-code they gave and implement it, I had to find some solutions
for these gotos.

-- Luc
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux