Dan Gohman | 23aefe5 | 2009-09-28 18:38:53 +0000 | [diff] [blame] | 1 | Analysis Opportunities: |
| 2 | |
| 3 | //===---------------------------------------------------------------------===// |
| 4 | |
| 5 | In test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll, the |
| 6 | ScalarEvolution expression for %r is this: |
| 7 | |
| 8 | {1,+,3,+,2}<loop> |
| 9 | |
| 10 | Outside the loop, this could be evaluated simply as (%n * %n), however |
| 11 | ScalarEvolution currently evaluates it as |
| 12 | |
| 13 | (-2 + (2 * (trunc i65 (((zext i64 (-2 + %n) to i65) * (zext i64 (-1 + %n) to i65)) /u 2) to i64)) + (3 * %n)) |
| 14 | |
| 15 | In addition to being much more complicated, it involves i65 arithmetic, |
| 16 | which is very inefficient when expanded into code. |
| 17 | |
| 18 | //===---------------------------------------------------------------------===// |