ループが通過する反復回数を知ることで、コンパイラは最適化を行うことができます。たとえば、次の 2 つのループを考えてみましょう。
不明な反復回数:
static void bitreverse(vbuf_desc * vbuf)
{
unsigned int idx = 0;
unsigned char * img = vbuf->usrptr;
while(idx < vbuf->bytesused) {
img[idx] = bitrev[img[idx]];
idx++;
}
}
既知の反復回数
static void bitreverse(vbuf_desc * vbuf)
{
unsigned int idx = 0;
unsigned char * img = vbuf->usrptr;
while(idx < 1280*400) {
img[idx] = bitrev[img[idx]];
idx++;
}
}
2 番目のバージョンは、2 回アンロールされるため、より高速なコードにコンパイルされます (少なくとも gcc 4.6.3 および -O2 を使用する ARM では)。最適化時に gcc が考慮に入れるループ回数をアサーションする方法はありますか?