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 | //===---------------------------------------------------------------------===// |
Dan Gohman | fafb890 | 2010-04-23 01:55:05 +0000 | [diff] [blame] | 19 | |
Dan Gohman | 948c8a3 | 2010-04-26 21:46:36 +0000 | [diff] [blame] | 20 | In formatValue in test/CodeGen/X86/lsr-delayed-fold.ll, |
Dan Gohman | fafb890 | 2010-04-23 01:55:05 +0000 | [diff] [blame] | 21 | |
| 22 | ScalarEvolution is forming this expression: |
| 23 | |
| 24 | ((trunc i64 (-1 * %arg5) to i32) + (trunc i64 %arg5 to i32) + (-1 * (trunc i64 undef to i32))) |
| 25 | |
| 26 | This could be folded to |
| 27 | |
| 28 | (-1 * (trunc i64 undef to i32)) |
| 29 | |
| 30 | //===---------------------------------------------------------------------===// |