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