Hi all,
I just noticed that LICM does not hoist/sink the following store out of the loop:
int array[20];
int i;
for (i = 0; i<100; i++) {
array [0] = 0;
}
The getElementPtr instruction is hoisted out of the loop; the store is not. Did I miss something obvious? Bitcode file attached.
Generated using LLVM 2.5 and
llvm-gcc -c -emit-llvm test_loop.c -o - | opt -licm -o test.bc -f
Thanks
Marc
test.bc (624 Bytes)
2009/10/27 Marc Brünink <marc@bruenink.de>
Hi all,
I just noticed that LICM does not hoist/sink the following store out of the loop:
int array[20];
int i;
for (i = 0; i<100; i++) {
array [0] = 0;
}
The getElementPtr instruction is hoisted out of the loop; the store is not. Did I miss something obvious? Bitcode file attached.
Generated using LLVM 2.5 and
llvm-gcc -c -emit-llvm test_loop.c -o - | opt -licm -o test.bc -f
Thanks for the report. Since this still happens with LLVM at the top of SVN, I filed it as http://llvm.org/PR5319 . Please add yourself to the cc list there.
Nick Lewycky
This is expected behavior, you need to run loop rotate before licm to get this. This is completely eliminate at -O3.
-Chris
So, while this is true, Nick has a good point in PR5319 that we’re not catching this at O2 with a slightly more complex testcase. LICM can definitely be improved here.
-Chris