NoQ added a comment.

Because it wasn't immediately obvious to me how to apply both this patch and 
https://reviews.llvm.org/D39398 (there are a couple of minor conflicts between 
them), i wanted to post a few pictures for the reference, because 
`debug.ViewCFG` graphs are much easier to comprehend than text dumps.

For example, here's the new CFG for `check_return()` in 
`loopexit-cfg-output.cpp`:

  833 int check_return() {
  834   for (int i = 0; i < 10; i++) {
  835     int j = 1;
  836     while (j < 12) {
  837       if (j % 2)
  838         return 0;
  839     }
  840   }
  841   return 1;
  842 }

F5732587: Screen Shot 2018-01-02 at 3.42.17 PM.png 
<https://reviews.llvm.org/F5732587>

----

I essentially have one question at a glance - for loop counter variables, don't 
we want `LoopEntrance` be before the initialization? I.e. on this picture 
wouldn't it be better to have

  [B8]
  1: WhileStmt (LoopEntrance)
  2: 1
  3: int j = 1;

?

Because otherwise our future `LoopContext` wouldn't correspond to any 
variable's lifetime scope, so it'd be kind of useless as a `ScopeContext`. 
Because, as far as i understand, there are two scopes in every loop:

1. The scope of the whole loop which includes the counter,
2. The scope of every iteration, which goes out of scope after the iteration 
ends.

And currently `LoopContext` is none of these. Would loop unrolling still work 
in a sensible manner if we move `LoopEntrance` to the beginning of the block?


https://reviews.llvm.org/D41150



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to