Hi Jingwen, This is the same GCC which in recent versions produces something like two dozen extraneous, useless, no-op instructions when doing a simple 64-bit math operation on 32-bit systems, and does not use SSE properly either. In each major release these problems get worse. The code generator is clearly in a state of slow degradation, starting about GCC version 5 or 6--not coincidentally the same time when the major version numbers started increasingly so rapidly, although it really has been junk since the beginning.
Stefan Kanthak hammered this point home numerous times on this list, much to the ire of people like Jonathan Wakely who called him a noob, telling him to "go file a bug" in a filing cabinet in some obscure corner of a disused lavatory so that it can be safely ignored, and so on. It seems that if correct code generation and optimization is important to you (as it should be), GCC is NOT the compiler to be using. I'm all the time discovering new and crazy problems with this convoluted pile of junk. My recent foray into bootstrapping GNAT (ADA) has opened up yet another can of worms. It's broken on GCC 10, and even more broken on GCC 9, and this despite 30+ years of development. Sometimes these days I even blame GCC when it wasn't at fault after all, because it's making itself into more and more of a likely suspect as the years go by. I haven't examined the code output of Clang to see how it compares, but it's worth serious investigation. Dave