Kde jsi prisel na to, ze to pri O3 pada? Cim vetsi level optimalizace, tim vetsi riziko bugu prekladace. Radeji pouziju O2 a nejake bottlenecky vyresim rucne, viz. odmocnina, nez riskovat, ze si prekladac zablbne a shodi to.
Cokoliv co ma mensi pravdepodobnost uspechu nez 100% je nepripustne.
Kolko bugov prekladaca si nasiel v takom GCC a kolko bugov si spravil ty? Ja som za poslednych pat rokov nasiel jeden bug v GCC a sam som spravil bugov mozno tisice.
Pri O3 sa zapinaju optimalizacie, ktore nafukuju binarku, cim mozu vykonavanie aj trochu spomalit. Prekladac celkovo neblbne, akurat sa chova podla specifikacie.
To sa hned poznaju antipatterny:
- chybajuci volatile (nepise sa do pamati, reorderuje sa)
- spoliehanie sa na funkciu, v ktorej sa nachadzam bez noinline - proste inlineuje sa skoro vsetko
- vynechava sa nepotrebny kod: ked sa vysledok nepouzije a funkcia dokazatelne nema side effect, tak sa funkcia ani nezavola
- ak k niecomu uzivatel podla specifikacie nema mat pristup a pouzije hack ako pole[-10], tak to kompilator podla predchadzajuceho bodu neodhali
- ked uzivatel kompilatoru neprezradi, co robi v svojom assembleri, tak to kompilator s kodom preusporiada tak, ako uzna za vhodne, aby bol vykon co najlepsi