Упрощение алгоритма
Наибольший прирост производительности дает именно алгоритмическая оптимизация (например, замена пузырьковой сортировки на сортировку вставками). Никакой компилятор с этим справится не в состоянии. Во всяком случае пока. Но первый шаг уже сделан. Современные компиляторы распознают (или во всяком случае пытаются распознать) смысловую нагрузку транслируемого кода и при необходимости заменяют исходный алгоритм другим, намного более эффективным.
Вот, например:
main(int n, char **v)
{
int a = 0; int b = 0;
for(i=0; i<n; i++) a++; // многократное сложение – это умножение
for(j=0; j<n; j++) b++;
return a*b;
}