sammccall added a comment. Example textual log (though better with colors):
=== Beginning data flow analysis === int target(int x) { while (x > 0) { --x; } return x + 1; } FunctionDecl 0x2a9a300 </usr/local/google/home/sammccall/test.cc:1:1, line:6:1> line:1:5 target 'int (int)' |-ParmVarDecl 0x2a9a238 <col:12, col:16> col:16 used x 'int' `-CompoundStmt 0x2a9a568 <col:19, line:6:1> |-WhileStmt 0x2a9a4c0 <line:2:3, line:4:3> | |-BinaryOperator 0x2a9a450 <line:2:10, col:12> 'bool' '>' | | |-ImplicitCastExpr 0x2a9a438 <col:10> 'int' <LValueToRValue> | | | `-DeclRefExpr 0x2a9a3f8 <col:10> 'int' lvalue ParmVar 0x2a9a238 'x' 'int' | | `-IntegerLiteral 0x2a9a418 <col:12> 'int' 0 | `-CompoundStmt 0x2a9a4a8 <col:15, line:4:3> | `-UnaryOperator 0x2a9a490 <line:3:5, col:7> 'int' lvalue prefix '--' | `-DeclRefExpr 0x2a9a470 <col:7> 'int' lvalue ParmVar 0x2a9a238 'x' 'int' `-ReturnStmt 0x2a9a558 <line:5:3, col:14> `-BinaryOperator 0x2a9a538 <col:10, col:14> 'int' '+' |-ImplicitCastExpr 0x2a9a520 <col:10> 'int' <LValueToRValue> | `-DeclRefExpr 0x2a9a4e0 <col:10> 'int' lvalue ParmVar 0x2a9a238 'x' 'int' `-IntegerLiteral 0x2a9a500 <col:14> 'int' 1 [B5 (ENTRY)] Succs (1): B4 [B1] 1: x 2: [B1.1] (ImplicitCastExpr, LValueToRValue, int) 3: 1 4: [B1.2] + [B1.3] 5: return [B1.4]; Preds (1): B4 Succs (1): B0 [B2] Preds (1): B3 Succs (1): B4 [B3] 1: x 2: --[B3.1] Preds (1): B4 Succs (1): B2 [B4] 1: x 2: [B4.1] (ImplicitCastExpr, LValueToRValue, int) 3: 0 4: [B4.2] > [B4.3] T: while [B4.4] Preds (2): B2 B5 Succs (2): B3 B1 [B0 (EXIT)] Preds (1): B1 === Entering block B4 (iteration 1) === [B4] 1: x 2: [B4.1] (ImplicitCastExpr, LValueToRValue, int) 3: 0 4: [B4.2] > [B4.3] T: while [B4.4] Preds (2): B2 B5 Succs (2): B3 B1 Computed state for B4.0: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) B0 B2 Processing element B4.1: x transfer! Computed state for B4.1: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) B0 B2 Processing element B4.2: x (ImplicitCastExpr, LValueToRValue, int) transfer! Computed state for B4.2: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) B0 B2 Processing element B4.3: 0 transfer! Computed state for B4.3: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) B0 B2 Processing element B4.4: x > 0 transfer! Computed state for B4.4: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) B0 B2 === Entering block B1 (iteration 1) === [B1] 1: x 2: [B1.1] (ImplicitCastExpr, LValueToRValue, int) 3: 1 4: [B1.2] + [B1.3] 5: return [B1.4]; Preds (1): B4 Succs (1): B0 Computed state for B1.0: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 Processing element B1.1: x transfer! Computed state for B1.1: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 Processing element B1.2: x (ImplicitCastExpr, LValueToRValue, int) transfer! Computed state for B1.2: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 Processing element B1.3: 1 transfer! Computed state for B1.3: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 Processing element B1.4: x + 1 transfer! Computed state for B1.4: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 Processing element B1.5: return x + 1; transfer! Computed state for B1.5: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) B2 B6 === Entering block B0 (iteration 1) === [B0 (EXIT)] Preds (1): B1 Computed state for B0.0: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2ab7da0: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 (and B0 (not B5))) (= B6 B4) (= B7 B8) (= B8 B6) B2 B7 === Entering block B3 (iteration 1) === [B3] 1: x 2: --[B3.1] Preds (1): B4 Succs (1): B2 Computed state for B3.0: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2aba810: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 B5) (= B5 (and B0 B6)) B2 B4 Processing element B3.1: x transfer! Computed state for B3.1: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2aba810: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 B5) (= B5 (and B0 B6)) B2 B4 Processing element B3.2: --x transfer! Computed state for B3.2: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2aba810: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 B5) (= B5 (and B0 B6)) B2 B4 === Entering block B2 (iteration 1) === [B2] Preds (1): B3 Succs (1): B4 Computed state for B2.0: DeclToLoc: ExprToLoc: [0x2a9a450, 0x2ab7e60] LocToVal: [0x2ab7e60, 0x2aba810: AtomicBool] FlowConditionToken: (= B0 B1) (= B1 B3) (= B3 B2) (= B4 B5) (= B5 B7) (= B6 B4) (= B7 (and B0 B8)) B2 B6 === Entering block B4 (iteration 2) === [B4] 1: x 2: [B4.1] (ImplicitCastExpr, LValueToRValue, int) 3: 0 4: [B4.2] > [B4.3] T: while [B4.4] Preds (2): B2 B5 Succs (2): B3 B1 Computed state for B4.0: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B7) (= B10 (and B2 B12)) (= B11 (or B0 B5)) (= B2 B3) (= B3 B1) (= B4 B11) (= B5 B6) (= B6 B8) (= B8 B9) (= B9 B10) B4 B7 Processing element B4.1: x transfer! Computed state for B4.1: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B7) (= B10 (and B2 B12)) (= B11 (or B0 B5)) (= B2 B3) (= B3 B1) (= B4 B11) (= B5 B6) (= B6 B8) (= B8 B9) (= B9 B10) B4 B7 Processing element B4.2: x (ImplicitCastExpr, LValueToRValue, int) transfer! Computed state for B4.2: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B7) (= B10 (and B2 B12)) (= B11 (or B0 B5)) (= B2 B3) (= B3 B1) (= B4 B11) (= B5 B6) (= B6 B8) (= B8 B9) (= B9 B10) B4 B7 Processing element B4.3: 0 transfer! Computed state for B4.3: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B7) (= B10 (and B2 B12)) (= B11 (or B0 B5)) (= B2 B3) (= B3 B1) (= B4 B11) (= B5 B6) (= B6 B8) (= B8 B9) (= B9 B10) B4 B7 Processing element B4.4: x > 0 transfer! Computed state for B4.4: DeclToLoc: ExprToLoc: LocToVal: FlowConditionToken: (= B0 B1) (= B1 B7) (= B10 (and B2 B12)) (= B11 (or B0 B5)) (= B2 B3) (= B3 B1) (= B4 B11) (= B5 B6) (= B6 B8) (= B8 B9) (= B9 B10) B4 B7 B4 has converged! === Finished analysis: 5 blocks in 6 total steps === Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D144730/new/ https://reviews.llvm.org/D144730 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits