Biggest problem is that gimple only works in source code to object. Not with a stack of objects to exe. This has major downsides for static building. To the point a lot of static builders end up sending all .c files into gcc at once so they get cross object optimised.
One possible solution could be to cut gcc and gimple into to separate parts. So the build order of gcc binutils changes. To gimple binutils gcc. Reason binutils and gcc both using the same optimisation engine. LD then gets the means when building exe's to run all the gimple optimisations again looking for new dead code and new predictable code produced across objects. Binutils and Gcc both have to have optimisation engines. If binutils optimisation engine is poor it pulled gcc down with it. Some way of running equal quality optimisation on the linking stage has to be found. This problem need to be investigated. Reason this effects everything built with gcc and binutils. Peter Dolding