------- Comment #2 from lloyd at randombit dot net 2007-11-16 00:50 ------- Is there be any way to modify the code such that GCC would have an easier time seeing this? I tried using 'assert(rnd_to_2 % 2 == 0)' (since glibc's __assert_fail is marked with noreturn I thought it might help), but that didn't seem to have an effect.
Short background that might be relevant: the code this is derived from is doing partial loop unrolling (8 iterations in the actual code) with a block of inline asm inserted, and then another loop following that handles any slop. Would rewriting the loop as while(in >= 2) { in -= 2; i += 2; } be likely to help? I see that it does with one particular version (4.1.2), but I have no intuition if that is because the optimizer understands such loops better or if it is just random luck. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34114