[LLVMdev] SimplifyCFG vs loops

Krzysztof Parzyszek kparzysz at codeaurora.org
Wed Oct 17 09:38:28 PDT 2012


On 10/17/2012 11:09 AM, Dan Gohman wrote:
> On Wed, Oct 17, 2012 at 8:41 AM, Krzysztof Parzyszek
> <kparzysz at codeaurora.org <mailto:kparzysz at codeaurora.org>> wrote:
>
>     Hello All,
>
>     The current implementation of the CFG simplification is
>     loop-agnostic. In the past I have observed that it can perform
>     transformations that can be detrimental to the loop structure.  One
>     example that I recall, is converting a loop like this:
>         while (...) {
>            ...
>            if (cond) continue;
>            ...
>         }
>     into two nested loops.  Specifically, the "continue" branch would go
>     back to the loop header making it appear as if there were two back
>     edges.
>
>
> Well, there really are two backedges there.

There is no reason for two back edges.  This loop could look like this:

header:
   ...
   ...
   if (cond) goto tail; else goto next;
next:
   ...
tail:
   if (loop-condition) goto header;


This way there is one loop with some control flow nested in it, instead 
of something that looks like two loops.



-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation



More information about the llvm-dev mailing list