-O2 Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed
tradeoff. The compiler does not perform loop unrolling or function inlining when you specify -O2. As
compared to -O, this option increases both compilation time and the performance of the generated code.
-O2 turns on all optimization flags specified by -O. It also turns on the following optimization flags:
-fthread-jumps -fcrossjumping -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks -fgcse
-fgcse-lm -fexpensive-optimizations -fstrength-reduce -frerun-cse-after-loop -frerun-loop-opt
-fcaller-saves -fforce-mem -fpeephole2 -fschedule-insns -fschedule-insns2 -fsched-interblock
-fsched-spec -fregmove -fstrict-aliasing -fdelete-null-pointer-checks -freorder-blocks
-freorder-functions -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels
-ftree-pre