[LLVMdev] Separate loop condition and loop body

Xinfinity xinfinity_a at yahoo.com
Tue May 11 02:01:12 PDT 2010



>>> To me it looks like any basic block from the loop body with a
>>> successor not in the loop body is a BB "building the condition" (an
>>> "exit" block).
>>
Consider break statements (CFG attached):

    while (j < 10 && j > 5 && j % 2 == 0) {
       j++;
       if (j == 9)
          break;
    }

In this example, block bb is in the loop body, has a successor not in  
the loop body, but is not building the condition. This appears to be a  
violation of your rule.

Trevor

Hi,

I agree that not all exiting blocks are part of the condition. 
Maybe your suggestion of trying a workaround would be easier. What I want is
to modify the structure of the loop by adding an extra condition before its
execution:

|------	extra.cond <-------|
|	     |		         |
|	     |		         |
|	     v		         |
|      |-loop.cond          |
|      |     |                   |
|      |     v	                 |
|      | CALL(body)  ___|
|      |
|      |---> loop.end
|
|____>exit

This condition has to be checked in the beginning of each iteration, that
means, the loop body should branch to this extra condition instead of the
loop condition. So I want to eliminate the branch from loop.body to
loop.cond and to insert a branch from loop.body to extra.cond .  Also, I
need to delimit the BBs building the body of the loop, in order to extract
them in a new function.

I hope my explanations are not too vague.
Thanks for your help.

Alexandra
 
-- 
View this message in context: http://old.nabble.com/Separate-loop-condition-and-loop-body-tp28512281p28521641.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.




More information about the llvm-dev mailing list