[LLVMdev] Scalar Evolution not canonalizing division?
Tobias Grosser
grosser at fim.uni-passau.de
Wed Oct 27 14:20:55 PDT 2010
Hi,
I am just found a scalar evolution function that does not seem canonical
to me.
The C code I used to produce it is:
long foo (long n, long m) {
long i, j;
long A[n][m];
for (i = 0; i < n; ++i)
for (j = 0; j < m; ++j)
A[i][j] = 1;
return A[42][42];
}
This produces after applying -mem2reg the attached LLVM-IR.
For the store to the array A in the loop I get this scalar evolution
function:
{((8 * ({0,+,(8 * %m)}<%for.cond> /u 8)) + %vla),+,8}<%for.cond5>
For me it seems the devision by "8" is not canonical. Is there any
reason this can not be simplified to:
{((1 * ({0,+,(1 * %m)}<%for.cond>)) + %vla),+,8}<%for.cond5>
which is actually this:
{(({0,+,%m}<%for.cond>) + %vla),+,8}<%for.cond5>
Any ideas
Tobi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: two_dim.c
Type: text/x-csrc
Size: 156 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101027/e2316b6c/attachment.c>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: two_dim.preopt.ll
Type: application/octet-stream
Size: 836 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101027/e2316b6c/attachment.obj>
More information about the llvm-dev
mailing list