add flag optimisations (test ok)
-funswitch-loops : Moved branches with loop invariant conditions out of the loop

-frename-registers : Attempted to avoid false dependencies in scheduled code by making use of registers left over after register allocation. This optimization most benefits processors with lots of registers

-frerun-cse-after-loop : Re-ran common subexpression elimination after loop optimizations are performed

-fomit-frame-pointer : Didn't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions

-fgcse-after-reload : Made a redundant load elimination pass performed after reload. The purpose of this pass is to clean up redundant spilling

-fgcse-sm : Ran a store motion pass after global common subexpression elimination. This pass attempts to move stores out of loops

-fgcse-las : Eliminated redundant loads that come after stores to the same memory location, both partial and full redundancies

-fweb : Constructed webs as commonly used for register allocation purposes and assigned each web individual pseudo register. This allows the register allocation pass to operate on pseudos directly, but also strengthens several other optimization passes, such as CSE, loop optimizer and trivial dead code remover

-ftracer : Performed tail duplication to enlarge superblock size. This transformation simplifies the control flow of the function allowing other optimizations to do a better job