On some of our benchmarks this change shows about 50% compile time improvement without any noticeable performance difference.
Details
Details
Diff Detail
Diff Detail
Event Timeline
Comment Actions
To give some more context here, this appears to be related to the use of isKnownNonNullAt in InstCombine to tag parameters as nonnull so that the inliner can exploit that fact. Dropping the max-uses parameter addresses the compile time impact we've observed without detrimental effects being observed.
We're also re-evaluating whether the context sensitivity in InstCombine is necessary at all. Igor added support to CorrelatedValueProp to do the same thing and InstCombine is run far more frequently than CVP is. It may be worth removing the handling from InstCombine entirely (or at least going back to the non-context sensative verserion), but we're still evaluating the impact of that change on our local tree.