As we already discussed in llvm-dev forum http://lists.llvm.org/pipermail/llvm-dev/2016-May/099724.html
I'm working on FP SCEV analysis in order to enable loop vectorization with FP induction variables.
Trying to minimize the first patch, I implemented only simple cases. Once this patch is accepted, I continue to fill the gaps between integer and fp scevs.
this is the minimal test case I started from:
float fp_inc;
float x = init; for (int i=0;i<N;i++){ A[i] = x; x += fp_inc; // Loop invariant variable or constant }
All optimizations and SCEV recurrence will come in the next patches.
I ran some tests to be sure that correctness is not broken.
What is the intent behind making SCEVFAddExpr and SCEVFMulExpr subclasses of SCEVNAryExpr? Does (a + b + c) represent ((a + b) + c) or (a + (b + c))?