Hmm.... Ik werk veel met de GNU C compiler, en ik wil hier even wat commentaar op geven, per flag dus.
-s -static: Twee flags die hetzelfde doen, en ervoor zorgen dat je binary een orde van grootte meer ruimte inneemt, omdat alle libaries meegelinkt worden. Dat het hier sneller door wordt is alleen te merken bij het opstarten van het programma. Deze parameter WIL JE DUS NIET GEBRUIKEN, tenzij je een programma zonder source code wil distribueren en zeker wilt weten dat mensen niet met de verkeerde libaries rondsnuffelen.
-O3 - Maakt je programma exact 0% sneller dan -O2 en is wel dertig keer buggier. Er is wel verschil tussen -O2 en -O, maar zelfs dat is zo klein dat de kans dat gcc foute code produceert het performance verschil onbelangrijk maakt. En geloof me nou maar, die kans is er echt, ik ben er zelf al een aantal keer (HARD!) tegenaan gelopen.
-fomit-frame-pointer: Geen probleem, nuttige flag in sommige gevallen (veel rekenwerk, veel functies ofzo).
-mpentiumpro, -march=pentiumpro: De laatste parameter voldoet, die impliceert namelijk de eerste

De nadelen hiervan zijn natuurlijk duidelijk: Je software draait niet meer op oude bakken. Verder haal je hier natuurlijk best wel wat performancewinst uit.
-funroll-loops: Tsja, dit kan nuttig zijn als je veel rekenwerk doet in je progje. Neemt wel meer harddisk/geheugenruimte in.
-malign-functions, -fschedule-insns2, -mwide-multiply: Nuttige flags. Behoorlijk CPU-specifiek, dus dit zal je programma behoorlijk trager maken op niet-Athlon/P-3 systemen.
-malign-double: Deze flag wil je NIET gebruiken, tenzij je veeeeel gebruik maakt van doubles in je programma. Dit zorgt ervoor dat de stack niet met 4 maar met 8 bytes tegelijk wordt gebruikt. Als je vervolgens integers gaat gebruiken, neemt elke integer 2 stackplaatsen in! Ik neem aan dat het testprogramma dit doet, anders wil je niet aan deze flag komen.
-Wall: Deze flag zou ieder programma moeten gebruiken, en heeft niets met optimalisatie te maken, maar alles met goede code. Dit zorgt ervoor dat GCC over alles warnings begint te spuien.
-fexpensive-optimizations heeft bijna geen nut, maar omdat we het hier over Athlons hebben gaan we niet zeiken over het feit dat je source er langer over doet om te compilen
We voegen hier nog een flagje aan toe:
-pipe: Zorgt voor een snellere compile omdat niet een tussenbestand, maar een pipe wordt gebruikt voor de communicatie tussen de assembler, preprocessor en compiler.
Zo, en aldus houden we over:
CFLAGS = -Wall -O2 -pipe -fomit-frame-pointer -march=pentiumpro -malign-functions=4 -funroll-loops -fexpensive-optimizations -malign-double -fschedule-insns2 -mwide-multiply
En zo denk ik erover. En bedenk altijd maar, het is beter om je source te optimaliseren dan erop te vertrouwen dat de compiler het voor je doet.