Page MenuHomePhabricator

[TLI] Support for per-Function TLI that overrides available libfuncs
Needs ReviewPublic

Authored by tejohnson on Sep 23 2019, 8:53 AM.



Follow-on to D66428, to help enable the TLI to be built per-function so
that -fno-builtin* handling can be migrated to use function attributes.
See discussion on D61634 for background. This is an enabler for fixing
handling of these options for LTO, for example.

In this patch, the TLI constructor is changed to take a Function, which
can be used to override the available builtins. The TLI is augmented
with an array that can be used to specify which builtins are not
available for the corresponding function. The available function checks
are changed to consult this override before checking the underlying
module level baseline TLII. The draft code to support setting this
new array is ifdef'ed out as the builtins are not yet converted to

I also added comments to indicate what we would want to do if the veclib
option was ever to be converted to a per-function attribute as well.

I removed a per-Triple caching of TLII objects in the analysis object,
as it is based on the Module's Triple which is the same for all
functions in any case. Is there a case where we would be compiling
multiple Modules with different Triples in one compilation?

Finally, I have changed the legacy analysis wrapper to create and use
the new PM analysis class (TargetLibraryAnalysis) in getTLI. This is
consistent with the behavior of getTTI for the legacy
TargetTransformInfo analysis. This change means that getTLI now creates
a new TLI on each call (although that should be very cheap as we cache
the module level TLII, and eventually computing the per-function
attribute based availability should also be reasonably efficient).
I measured the compile time for a large C++ file with tens of thousands
of functions and as expected there was no increase.

Diff Detail

Event Timeline

tejohnson created this revision.Sep 23 2019, 8:53 AM
Herald added a project: Restricted Project. · View Herald TranscriptSep 23 2019, 8:53 AM
gchatelet added inline comments.Sep 23 2019, 11:29 AM

Can we use llvm/ADT/BitVector.h instead?

tejohnson marked 2 inline comments as done.Sep 23 2019, 4:11 PM
tejohnson added inline comments.

Good idea.

tejohnson updated this revision to Diff 221429.Sep 23 2019, 4:11 PM
tejohnson marked an inline comment as done.

Use BitVector