diff options
| author | Kristof Umann <dkszelethus@gmail.com> | 2019-07-03 12:53:19 +0000 |
|---|---|---|
| committer | Kristof Umann <dkszelethus@gmail.com> | 2019-07-03 12:53:19 +0000 |
| commit | 00aab1d45e1f67fbc265ed5ea4b2230148181970 (patch) | |
| tree | e288b807ca296ba4aa8fda363994c8b302fa23c0 /llvm/test/Bitcode/thinlto-function-summary-refgraph.ll | |
| parent | 5cf3cc624609b420319acef498becf48cc011c9a (diff) | |
| download | llvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.zip llvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.tar.gz llvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.tar.bz2 | |
[analyzer][CFG] Return the correct terminator condition
For the following terminator statement:
if (A && B && C && D)
The built CFG is the following:
[B5 (ENTRY)]
Succs (1): B4
[B1]
1: 10
2: j
3: [B1.2] (ImplicitCastExpr, LValueToRValue, int)
4: [B1.1] / [B1.3]
5: int x = 10 / j;
Preds (1): B2
Succs (1): B0
[B2]
1: C
2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool)
T: if [B4.4] && [B3.2] && [B2.2]
Preds (1): B3
Succs (2): B1 B0
[B3]
1: B
2: [B3.1] (ImplicitCastExpr, LValueToRValue, _Bool)
T: [B4.4] && [B3.2] && ...
Preds (1): B4
Succs (2): B2 B0
[B4]
1: 0
2: int j = 0;
3: A
4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool)
T: [B4.4] && ...
Preds (1): B5
Succs (2): B3 B0
[B0 (EXIT)]
Preds (4): B1 B2 B3 B4
However, even though the path of execution in B2 only depends on C's value,
CFGBlock::getCondition() would return the entire condition (A && B && C). For
B3, it would return A && B. I changed this the actual condition.
Differential Revision: https://reviews.llvm.org/D63538
llvm-svn: 365036
Diffstat (limited to 'llvm/test/Bitcode/thinlto-function-summary-refgraph.ll')
0 files changed, 0 insertions, 0 deletions
