Вынос инвариантных ветвлений
Ветвления, инвариантные по отношению цикла, могут быть вынесены за его пределы, путем расщепления одного цикла на два или более. Размеры кода при этом возрастают, но и производительность увеличивается (конечно, при условии, что цикл влезает в кэш).
Покажем это на следующем примере:
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (flag < 0x669) a[i][j]=i+j; else a[i][j]=0;
}
}