- The kernel is special, not at all like most other code, so gcc behaviour that is considered wrong for the kernel is in other cases perfectly fine.
- The kernel supports all kind of gcc versions, so fixing something in newer versions isn't enough. The problem is worked around one way or the other, reducing the need to change gcc.
Other reason is that optimising is a very difficult problem, and cases where gcc does the wrong thing are in general not easy to fix, because it needs a lot of restructuring.
As the posted numbers have shown, gcc almost always does the right thing. Unfortunately, doing it wrong only for a couple functions can be quite bad.