003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/IR
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
IR
/
📁
..
📄
AbstractCallSite.cpp
(5.14 KB)
📄
AsmWriter.cpp
(152.8 KB)
📄
AttributeImpl.h
(10.49 KB)
📄
Attributes.cpp
(63.53 KB)
📄
AutoUpgrade.cpp
(188.79 KB)
📄
BasicBlock.cpp
(16.46 KB)
📄
Comdat.cpp
(2.33 KB)
📄
ConstantFold.cpp
(104.22 KB)
📄
ConstantFold.h
(2.55 KB)
📄
ConstantRange.cpp
(54.53 KB)
📄
Constants.cpp
(117.17 KB)
📄
ConstantsContext.h
(26.51 KB)
📄
Core.cpp
(143.39 KB)
📄
DIBuilder.cpp
(43.31 KB)
📄
DataLayout.cpp
(31.11 KB)
📄
DebugInfo.cpp
(54.5 KB)
📄
DebugInfoMetadata.cpp
(52.5 KB)
📄
DebugLoc.cpp
(4 KB)
📄
DiagnosticHandler.cpp
(3.58 KB)
📄
DiagnosticInfo.cpp
(13.72 KB)
📄
DiagnosticPrinter.cpp
(2.93 KB)
📄
Dominators.cpp
(14.38 KB)
📄
FPEnv.cpp
(2.63 KB)
📄
Function.cpp
(58.45 KB)
📄
GVMaterializer.cpp
(640 B)
📄
Globals.cpp
(19.65 KB)
📄
IRBuilder.cpp
(44.38 KB)
📄
IRPrintingPasses.cpp
(4.37 KB)
📄
InlineAsm.cpp
(9.63 KB)
📄
Instruction.cpp
(26.63 KB)
📄
Instructions.cpp
(165.63 KB)
📄
IntrinsicInst.cpp
(11.05 KB)
📄
LLVMContext.cpp
(11.43 KB)
📄
LLVMContextImpl.cpp
(7.66 KB)
📄
LLVMContextImpl.h
(51.94 KB)
📄
LLVMRemarkStreamer.cpp
(6.35 KB)
📄
LegacyPassManager.cpp
(60.13 KB)
📄
MDBuilder.cpp
(11.87 KB)
📄
Mangler.cpp
(7.32 KB)
📄
Metadata.cpp
(47.29 KB)
📄
MetadataImpl.h
(1.43 KB)
📄
Module.cpp
(24.01 KB)
📄
ModuleSummaryIndex.cpp
(21.49 KB)
📄
Operator.cpp
(4.97 KB)
📄
OptBisect.cpp
(1.95 KB)
📄
Pass.cpp
(8.33 KB)
📄
PassInstrumentation.cpp
(701 B)
📄
PassManager.cpp
(3.69 KB)
📄
PassRegistry.cpp
(4.47 KB)
📄
PassTimingInfo.cpp
(9.08 KB)
📄
ProfileSummary.cpp
(10.8 KB)
📄
SafepointIRVerifier.cpp
(34.4 KB)
📄
Statepoint.cpp
(1.51 KB)
📄
SymbolTableListTraitsImpl.h
(4.21 KB)
📄
Type.cpp
(24.49 KB)
📄
TypeFinder.cpp
(5.02 KB)
📄
Use.cpp
(1.05 KB)
📄
User.cpp
(7.17 KB)
📄
Value.cpp
(36.33 KB)
📄
ValueSymbolTable.cpp
(4.36 KB)
📄
Verifier.cpp
(224.01 KB)
Editing: PassRegistry.cpp
//===- PassRegistry.cpp - Pass Registration Implementation ----------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the PassRegistry, with which passes are registered on // initialization, and supports the PassManager in dependency resolution. // //===----------------------------------------------------------------------===// #include "llvm/PassRegistry.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Pass.h" #include "llvm/PassInfo.h" #include "llvm/Support/ManagedStatic.h" #include <cassert> #include <memory> #include <utility> using namespace llvm; // FIXME: We use ManagedStatic to erase the pass registrar on shutdown. // Unfortunately, passes are registered with static ctors, and having // llvm_shutdown clear this map prevents successful resurrection after // llvm_shutdown is run. Ideally we should find a solution so that we don't // leak the map, AND can still resurrect after shutdown. static ManagedStatic<PassRegistry> PassRegistryObj; PassRegistry *PassRegistry::getPassRegistry() { return &*PassRegistryObj; } //===----------------------------------------------------------------------===// // Accessors // PassRegistry::~PassRegistry() = default; const PassInfo *PassRegistry::getPassInfo(const void *TI) const { sys::SmartScopedReader<true> Guard(Lock); MapType::const_iterator I = PassInfoMap.find(TI); return I != PassInfoMap.end() ? I->second : nullptr; } const PassInfo *PassRegistry::getPassInfo(StringRef Arg) const { sys::SmartScopedReader<true> Guard(Lock); StringMapType::const_iterator I = PassInfoStringMap.find(Arg); return I != PassInfoStringMap.end() ? I->second : nullptr; } //===----------------------------------------------------------------------===// // Pass Registration mechanism // void PassRegistry::registerPass(const PassInfo &PI, bool ShouldFree) { sys::SmartScopedWriter<true> Guard(Lock); bool Inserted = PassInfoMap.insert(std::make_pair(PI.getTypeInfo(), &PI)).second; assert(Inserted && "Pass registered multiple times!"); (void)Inserted; PassInfoStringMap[PI.getPassArgument()] = &PI; // Notify any listeners. for (auto *Listener : Listeners) Listener->passRegistered(&PI); if (ShouldFree) ToFree.push_back(std::unique_ptr<const PassInfo>(&PI)); } void PassRegistry::enumerateWith(PassRegistrationListener *L) { sys::SmartScopedReader<true> Guard(Lock); for (auto PassInfoPair : PassInfoMap) L->passEnumerate(PassInfoPair.second); } /// Analysis Group Mechanisms. void PassRegistry::registerAnalysisGroup(const void *InterfaceID, const void *PassID, PassInfo &Registeree, bool isDefault, bool ShouldFree) { PassInfo *InterfaceInfo = const_cast<PassInfo *>(getPassInfo(InterfaceID)); if (!InterfaceInfo) { // First reference to Interface, register it now. registerPass(Registeree); InterfaceInfo = &Registeree; } assert(Registeree.isAnalysisGroup() && "Trying to join an analysis group that is a normal pass!"); if (PassID) { PassInfo *ImplementationInfo = const_cast<PassInfo *>(getPassInfo(PassID)); assert(ImplementationInfo && "Must register pass before adding to AnalysisGroup!"); sys::SmartScopedWriter<true> Guard(Lock); // Make sure we keep track of the fact that the implementation implements // the interface. ImplementationInfo->addInterfaceImplemented(InterfaceInfo); if (isDefault) { assert(InterfaceInfo->getNormalCtor() == nullptr && "Default implementation for analysis group already specified!"); assert( ImplementationInfo->getNormalCtor() && "Cannot specify pass as default if it does not have a default ctor"); InterfaceInfo->setNormalCtor(ImplementationInfo->getNormalCtor()); } } if (ShouldFree) ToFree.push_back(std::unique_ptr<const PassInfo>(&Registeree)); } void PassRegistry::addRegistrationListener(PassRegistrationListener *L) { sys::SmartScopedWriter<true> Guard(Lock); Listeners.push_back(L); } void PassRegistry::removeRegistrationListener(PassRegistrationListener *L) { sys::SmartScopedWriter<true> Guard(Lock); auto I = llvm::find(Listeners, L); Listeners.erase(I); }
Upload File
Create Folder