This “law” was never really reasonable or sensible.
I’ve been working on optimizing compiler backends for nearly 30 years. The reality is that you hit a wall of diminishing returns pretty quickly, within say 5-20 person-years of effort (so a small team working for say 3-5 years).
You also relatively quickly get to the point where heuristics matter very much and all you do is generate new S-curves as you make changes. Meaning that every change speeds some workloads up, and slows others down.
Disciplined compiler writers will follow the old adage that an optimization needs to pay for itself, meaning that you don’t add things that slow down compilation without improving that S-curve by a relatively comparable amount.
What we get with LLVM is a large number of people tossing in the things that help the handful of workloads they are currently working on, with limited oversight regarding how that’s impacting compile-time for everyone else. So the compiler gets slower and slower, the compiled code doesn’t get much faster, and overall the compiler grows and grows in complexity.
This is why I’m personally a lot more excited about working on small manageable compiler code bases rather than large monolithic ones that try to be everything to everyone.
I’ve been working on optimizing compiler backends for nearly 30 years. The reality is that you hit a wall of diminishing returns pretty quickly, within say 5-20 person-years of effort (so a small team working for say 3-5 years).
You also relatively quickly get to the point where heuristics matter very much and all you do is generate new S-curves as you make changes. Meaning that every change speeds some workloads up, and slows others down.
Disciplined compiler writers will follow the old adage that an optimization needs to pay for itself, meaning that you don’t add things that slow down compilation without improving that S-curve by a relatively comparable amount.
What we get with LLVM is a large number of people tossing in the things that help the handful of workloads they are currently working on, with limited oversight regarding how that’s impacting compile-time for everyone else. So the compiler gets slower and slower, the compiled code doesn’t get much faster, and overall the compiler grows and grows in complexity.
This is why I’m personally a lot more excited about working on small manageable compiler code bases rather than large monolithic ones that try to be everything to everyone.