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