[PGO] Fix two issues in PGOMemOPSizeOpt.

Authored by yamauchi on Feb 26 2021, 2:44 PM.


[PGO] Fix two issues in PGOMemOPSizeOpt.

  1. PGOMemOPSizeOpt grabs only the first, up to five (by default) entries from

the value profile metadata and preserves the remaining entries for the fallback
memop call site. If there are more than five entries, the rest of the entries
would get dropped. This is fine for PGOMemOPSizeOpt itself as it only promotes
up to 3 (by default) values, but potentially not for other downstream passes
that may use the value profile metadata.

  1. PGOMemOPSizeOpt originally assumed that only values 0 through 8 are kept

track of. When the range buckets were introduced, it was changed to skip the
range buckets, but since it does not grab all entries (only five), if some range
buckets exist in the first five entries, it could potentially cause fewer
promotion opportunities (eg. if 4 out of 5 were range buckets, it may be able to
promote up to one non-range bucket, as opposed to 3.) Also, combined with 1, it
means that wrong entries may be preserved, as it didn't correctly keep track of
which were entries were skipped.

To fix this, PGOMemOPSizeOpt now grabs all the entries (up to the maximum number
of value profile buckets), keeps track of which entries were skipped, and
preserves all the remaining entries.

Differential Revision: https://reviews.llvm.org/D97592


yamauchiMar 11 2021, 9:53 AM
Differential Revision
D97592: [PGO] Fix two issues in PGOMemOPSizeOpt.
rG6312c5387089: [IRBuilder] Deprecate CreateLoad APIs with implicit type