Go to the documentation of this file.
22 typename C::iterator addEntry(
C &Container,
StringRef InstallName) {
24 return O.getInstallName() < InstallName;
26 if (
I != Container.end() &&
I->getInstallName() == InstallName)
29 return Container.emplace(
I, InstallName);
33 typename C::iterator addEntry(
C &Container,
const Target &Target_) {
38 if ((Iter !=
std::end(Container)) && !(Target_ < *Iter))
41 return Container.insert(Iter, Target_);
51 auto Client = addEntry(AllowableClients, InstallName);
57 auto Lib = addEntry(ReexportedLibraries, InstallName);
63 [](
const std::pair<Target, std::string> &
LHS,
66 if ((Iter != ParentUmbrellas.end()) && !(Target_ < Iter->first)) {
67 Iter->second = std::string(Parent);
71 ParentUmbrellas.emplace(Iter, Target_, std::string(Parent));
76 [](
const std::pair<Target, std::string> &
LHS,
79 if ((Iter != UUIDs.end()) && !(Target_ < Iter->first)) {
80 Iter->second = std::string(
UUID);
84 UUIDs.emplace(Iter, Target_, std::string(
UUID));
88 std::stringstream Stream;
89 for (
unsigned i = 0;
i < 16; ++
i) {
90 if (
i == 4 ||
i == 6 ||
i == 8 ||
i == 10)
92 Stream << std::setfill(
'0') << std::setw(2) << std::uppercase << std::hex
93 <<
static_cast<int>(
UUID[
i]);
105 return Archs.
has(Target_.Arch);
112 Name = copyString(Name);
115 result.first->second =
new (Allocator)
Symbol{Kind, Name, Targets, Flags};
117 for (
const auto &
Target : Targets)
123 [](
const std::shared_ptr<InterfaceFile> &
LHS,
124 const std::shared_ptr<InterfaceFile> &
RHS) {
125 return LHS->InstallName <
RHS->InstallName;
127 Document->Parent =
this;
128 Documents.insert(Pos, Document);
132 if (Targets !=
O.Targets)
134 if (InstallName !=
O.InstallName)
136 if ((CurrentVersion !=
O.CurrentVersion) ||
137 (CompatibilityVersion !=
O.CompatibilityVersion))
139 if (SwiftABIVersion !=
O.SwiftABIVersion)
141 if (IsTwoLevelNamespace !=
O.IsTwoLevelNamespace)
143 if (IsAppExtensionSafe !=
O.IsAppExtensionSafe)
145 if (IsInstallAPI !=
O.IsInstallAPI)
147 if (ParentUmbrellas !=
O.ParentUmbrellas)
149 if (AllowableClients !=
O.AllowableClients)
151 if (ReexportedLibraries !=
O.ReexportedLibraries)
153 if (Symbols !=
O.Symbols)
155 if (!
std::equal(Documents.begin(), Documents.end(),
O.Documents.begin(),
157 [](
const std::shared_ptr<InterfaceFile>
LHS,
158 const std::shared_ptr<InterfaceFile>
RHS) {
This is an optimization pass for GlobalISel generic memory operations.
void addSymbol(SymbolKind Kind, StringRef Name, const TargetList &Targets, SymbolFlags Flags=SymbolFlags::None)
Add a symbol to the symbols list or extend an existing one.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
void addReexportedLibrary(StringRef InstallName, const Target &Target)
Add a re-exported library.
void addTarget(const Target &Target)
Set and add target.
Target - Wrapper for Target specific information.
const_iterator end(StringRef path)
Get end iterator over path.
It looks like we only need to define PPCfmarto for these because according to these instructions perform RTO on fma s result
(vector float) vec_cmpeq(*A, *B) C
bool has(Architecture Arch) const
const_target_range targets() const
void addTarget(const Target &Target)
bool operator==(const InterfaceFile &O) const
The equality is determined by attributes that impact linking compatibilities.
Defines the interface file.
Reference to an interface file.
print Print MemDeps of function
std::pair< llvm::MachO::Target, std::string > UUID
StringRef - Represent a constant reference to a string, i.e.
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
auto partition_point(R &&Range, Predicate P)
Binary search for the first iterator in a range where a predicate is false.
void addAllowableClient(StringRef InstallName, const Target &Target)
Add an allowable client.
void addUUID(const Target &Target, StringRef UUID)
Add an Target/UUID pair.
std::pair< iterator, bool > try_emplace(KeyT &&Key, Ts &&... Args)
void addParentUmbrella(const Target &Target_, StringRef Parent)
Set the parent umbrella frameworks.
A range adaptor for a pair of iterators.
void addDocument(std::shared_ptr< InterfaceFile > &&Document)
Add a library for inlining to top level library.