xref: /aosp_15_r20/external/llvm/lib/Analysis/README.txt (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard WorkerAnalysis Opportunities:
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker//===---------------------------------------------------------------------===//
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard WorkerIn test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll, the
6*9880d681SAndroid Build Coastguard WorkerScalarEvolution expression for %r is this:
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker  {1,+,3,+,2}<loop>
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard WorkerOutside the loop, this could be evaluated simply as (%n * %n), however
11*9880d681SAndroid Build Coastguard WorkerScalarEvolution currently evaluates it as
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker  (-2 + (2 * (trunc i65 (((zext i64 (-2 + %n) to i65) * (zext i64 (-1 + %n) to i65)) /u 2) to i64)) + (3 * %n))
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard WorkerIn addition to being much more complicated, it involves i65 arithmetic,
16*9880d681SAndroid Build Coastguard Workerwhich is very inefficient when expanded into code.
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker//===---------------------------------------------------------------------===//
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard WorkerIn formatValue in test/CodeGen/X86/lsr-delayed-fold.ll,
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard WorkerScalarEvolution is forming this expression:
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker((trunc i64 (-1 * %arg5) to i32) + (trunc i64 %arg5 to i32) + (-1 * (trunc i64 undef to i32)))
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard WorkerThis could be folded to
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker(-1 * (trunc i64 undef to i32))
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker//===---------------------------------------------------------------------===//
31