Page MenuHomePhabricator

[InstrProf] Add option to avoid instrumenting small functions

Authored by ellis on Aug 12 2022, 4:06 PM.



If a function only has a few instructions, instrumentation can significantly increase the size and performance overhead of that function. Add the -pgo-function-size-threshold option to select a size threshold so these small functions are not instrumented.

A similar option -fxray-instruction-threshold=<N> is used for XRay to reduce binary size overhead [1].


Diff Detail

Event Timeline

ellis created this revision.Aug 12 2022, 4:06 PM
Herald added a project: Restricted Project. · View Herald TranscriptAug 12 2022, 4:06 PM
ellis edited the summary of this revision. (Show Details)Aug 12 2022, 4:24 PM
ellis added reviewers: phosek, davidxl, MaskRay.
ellis published this revision for review.Aug 12 2022, 4:34 PM

I originally wanted to check this threshold in clang and add the skipprofile attribute for small functions. Unfortunately, clang doesn't have a good idea of how small functions are, i.e., how many instructions they have, before codegen and before optimizations. Of course, the number of IR instructions does not map directly to the size of the assembly function, but this is the best we can do since this is when we are injecting instrumentation.

Herald added a project: Restricted Project. · View Herald TranscriptAug 12 2022, 4:34 PM
MaskRay accepted this revision.Aug 13 2022, 6:24 PM

LGTM. Please wait a bit for others' opinions.


The convention is to omit the period for help messages. Just ignore a few options in this file which do not stick with the convention.





This revision is now accepted and ready to land.Aug 13 2022, 6:24 PM
ellis added inline comments.Aug 15 2022, 8:48 AM


I think you’ve helped me with opt<> before, e.g., to omit cl::init(0). Is there some guide that describes the defaults and the conversions for this? Maybe we could add it to the programmers manual?

ellis updated this revision to Diff 453273.Aug 17 2022, 6:45 AM

Resolve comments

This revision was landed with ongoing or failed builds.Aug 17 2022, 6:47 AM
This revision was automatically updated to reflect the committed changes.