003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/include/llvm/CodeGen
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
include
/
llvm
/
CodeGen
/
📁
..
📄
AccelTable.h
(13.54 KB)
📄
Analysis.h
(6.04 KB)
📄
AntiDepBreaker.h
(3.78 KB)
📄
AsmPrinter.h
(27.35 KB)
📄
AsmPrinterHandler.h
(2.6 KB)
📄
AtomicExpandUtils.h
(2.49 KB)
📄
BasicTTIImpl.h
(73.64 KB)
📄
BuiltinGCs.h
(1008 B)
📄
CSEConfigBase.h
(1.09 KB)
📄
CalcSpillWeights.h
(4.69 KB)
📄
CallingConvLower.h
(21 KB)
📄
CommandFlags.h
(3.65 KB)
📄
CostTable.h
(1.87 KB)
📄
DAGCombine.h
(606 B)
📄
DFAPacketizer.h
(7.47 KB)
📄
DIE.h
(32.19 KB)
📄
DIEValue.def
(1.4 KB)
📄
DbgEntityHistoryCalculator.h
(4.37 KB)
📄
DebugHandlerBase.h
(4.68 KB)
📄
DwarfStringPoolEntry.h
(2.18 KB)
📄
EdgeBundles.h
(2.13 KB)
📄
ExecutionDomainFix.h
(7.72 KB)
📄
ExpandReductions.h
(726 B)
📄
FastISel.h
(22.87 KB)
📄
FaultMaps.h
(6.66 KB)
📄
FunctionLoweringInfo.h
(9.68 KB)
📄
GCMetadata.h
(7.24 KB)
📄
GCMetadataPrinter.h
(2.46 KB)
📄
GCStrategy.h
(5.25 KB)
📁
GlobalISel
📄
ISDOpcodes.h
(52.75 KB)
📄
IndirectThunks.h
(3.85 KB)
📄
IntrinsicLowering.h
(1.67 KB)
📄
LatencyPriorityQueue.h
(3.09 KB)
📄
LazyMachineBlockFrequencyInfo.h
(2.82 KB)
📄
LexicalScopes.h
(10.06 KB)
📄
LinkAllAsmWriterComponents.h
(1.34 KB)
📄
LinkAllCodegenComponents.h
(2.18 KB)
📄
LiveInterval.h
(37.24 KB)
📄
LiveIntervalCalc.h
(2.91 KB)
📄
LiveIntervalUnion.h
(6.93 KB)
📄
LiveIntervals.h
(19.86 KB)
📄
LivePhysRegs.h
(7.51 KB)
📄
LiveRangeCalc.h
(11.49 KB)
📄
LiveRangeEdit.h
(10.45 KB)
📄
LiveRegMatrix.h
(6.18 KB)
📄
LiveRegUnits.h
(6.24 KB)
📄
LiveStacks.h
(3.35 KB)
📄
LiveVariables.h
(12.98 KB)
📄
LoopTraversal.h
(4.38 KB)
📄
LowLevelType.h
(1.28 KB)
📄
MBFIWrapper.h
(1.58 KB)
📄
MIRFormatter.h
(3.13 KB)
📁
MIRParser
📄
MIRPrinter.h
(1.73 KB)
📄
MIRYamlMapping.h
(23.95 KB)
📄
MachORelocation.h
(2.19 KB)
📄
MachineBasicBlock.h
(42.95 KB)
📄
MachineBlockFrequencyInfo.h
(3.21 KB)
📄
MachineBranchProbabilityInfo.h
(2.69 KB)
📄
MachineCombinerPattern.h
(3.5 KB)
📄
MachineConstantPool.h
(5.25 KB)
📄
MachineDominanceFrontier.h
(2.93 KB)
📄
MachineDominators.h
(9.59 KB)
📄
MachineFrameInfo.h
(34.84 KB)
📄
MachineFunction.h
(42.94 KB)
📄
MachineFunctionPass.h
(2.93 KB)
📄
MachineInstr.h
(73.72 KB)
📄
MachineInstrBuilder.h
(22.84 KB)
📄
MachineInstrBundle.h
(10.16 KB)
📄
MachineInstrBundleIterator.h
(10.92 KB)
📄
MachineJumpTableInfo.h
(4.66 KB)
📄
MachineLoopInfo.h
(7.3 KB)
📄
MachineLoopUtils.h
(1.74 KB)
📄
MachineMemOperand.h
(12.69 KB)
📄
MachineModuleInfo.h
(9.88 KB)
📄
MachineModuleInfoImpls.h
(3.36 KB)
📄
MachineOperand.h
(37.64 KB)
📄
MachineOptimizationRemarkEmitter.h
(8.99 KB)
📄
MachineOutliner.h
(8.04 KB)
📄
MachinePassRegistry.h
(6.1 KB)
📄
MachinePipeliner.h
(21.17 KB)
📄
MachinePostDominators.h
(2.93 KB)
📄
MachineRegionInfo.h
(5.93 KB)
📄
MachineRegisterInfo.h
(46.75 KB)
📄
MachineSSAUpdater.h
(4.37 KB)
📄
MachineScheduler.h
(36.6 KB)
📄
MachineSizeOpts.h
(1.86 KB)
📄
MachineTraceMetrics.h
(17.17 KB)
📄
MacroFusion.h
(1.96 KB)
📄
ModuloSchedule.h
(15.8 KB)
📄
NonRelocatableStringpool.h
(2.9 KB)
📁
PBQP
📄
PBQPRAConstraint.h
(1.83 KB)
📄
ParallelCG.h
(1.66 KB)
📄
Passes.h
(18.96 KB)
📄
PreISelIntrinsicLowering.h
(944 B)
📄
PseudoSourceValue.h
(6.21 KB)
📄
RDFGraph.h
(33.73 KB)
📄
RDFLiveness.h
(5.01 KB)
📄
RDFRegisters.h
(6.51 KB)
📄
ReachingDefAnalysis.h
(10.68 KB)
📄
RegAllocPBQP.h
(16.47 KB)
📄
RegAllocRegistry.h
(2.27 KB)
📄
Register.h
(5.61 KB)
📄
RegisterClassInfo.h
(4.86 KB)
📄
RegisterPressure.h
(21.04 KB)
📄
RegisterScavenging.h
(8.73 KB)
📄
RegisterUsageInfo.h
(2.3 KB)
📄
ResourcePriorityQueue.h
(4.19 KB)
📄
RuntimeLibcalls.h
(3.05 KB)
📄
SDNodeProperties.td
(1.57 KB)
📄
ScheduleDAG.h
(28.92 KB)
📄
ScheduleDAGInstrs.h
(15.49 KB)
📄
ScheduleDAGMutation.h
(1021 B)
📄
ScheduleDFS.h
(5.79 KB)
📄
ScheduleHazardRecognizer.h
(4.65 KB)
📄
SchedulerRegistry.h
(4.27 KB)
📄
ScoreboardHazardRecognizer.h
(3.7 KB)
📄
SelectionDAG.h
(89.12 KB)
📄
SelectionDAGAddressAnalysis.h
(3.58 KB)
📄
SelectionDAGISel.h
(13.48 KB)
📄
SelectionDAGNodes.h
(91.77 KB)
📄
SelectionDAGTargetInfo.h
(7.99 KB)
📄
SlotIndexes.h
(24.12 KB)
📄
Spiller.h
(1.16 KB)
📄
StackMaps.h
(11.45 KB)
📄
StackProtector.h
(4.1 KB)
📄
SwiftErrorValueTracking.h
(3.87 KB)
📄
SwitchLoweringUtils.h
(9.51 KB)
📄
TailDuplicator.h
(5.54 KB)
📄
TargetCallingConv.h
(8.26 KB)
📄
TargetFrameLowering.h
(19.21 KB)
📄
TargetInstrInfo.h
(84.48 KB)
📄
TargetLowering.h
(194.17 KB)
📄
TargetLoweringObjectFileImpl.h
(11.63 KB)
📄
TargetOpcodes.h
(1.37 KB)
📄
TargetPassConfig.h
(17.9 KB)
📄
TargetRegisterInfo.h
(48.65 KB)
📄
TargetSchedule.h
(7.75 KB)
📄
TargetSubtargetInfo.h
(12.53 KB)
📄
UnreachableBlockElim.h
(1.39 KB)
📄
ValueTypes.h
(17.2 KB)
📄
ValueTypes.td
(11.42 KB)
📄
VirtRegMap.h
(6.37 KB)
📄
WasmEHFuncInfo.h
(1.92 KB)
📄
WinEHFuncInfo.h
(4.01 KB)
Editing: MachineModuleInfo.h
//===-- llvm/CodeGen/MachineModuleInfo.h ------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // Collect meta information for a module. This information should be in a // neutral form that can be used by different debugging and exception handling // schemes. // // The organization of information is primarily clustered around the source // compile units. The main exception is source line correspondence where // inlining may interleave code from various compile units. // // The following information can be retrieved from the MachineModuleInfo. // // -- Source directories - Directories are uniqued based on their canonical // string and assigned a sequential numeric ID (base 1.) // -- Source files - Files are also uniqued based on their name and directory // ID. A file ID is sequential number (base 1.) // -- Source line correspondence - A vector of file ID, line#, column# triples. // A DEBUG_LOCATION instruction is generated by the DAG Legalizer // corresponding to each entry in the source line list. This allows a debug // emitter to generate labels referenced by debug information tables. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MACHINEMODULEINFO_H #define LLVM_CODEGEN_MACHINEMODULEINFO_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/IR/PassManager.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCSymbol.h" #include "llvm/Pass.h" #include <memory> #include <utility> #include <vector> namespace llvm { class BasicBlock; class CallInst; class Function; class LLVMTargetMachine; class MMIAddrLabelMap; class MachineFunction; class Module; //===----------------------------------------------------------------------===// /// This class can be derived from and used by targets to hold private /// target-specific information for each Module. Objects of type are /// accessed/created with MMI::getInfo and destroyed when the MachineModuleInfo /// is destroyed. /// class MachineModuleInfoImpl { public: using StubValueTy = PointerIntPair<MCSymbol *, 1, bool>; using SymbolListTy = std::vector<std::pair<MCSymbol *, StubValueTy>>; virtual ~MachineModuleInfoImpl(); protected: /// Return the entries from a DenseMap in a deterministic sorted orer. /// Clears the map. static SymbolListTy getSortedStubs(DenseMap<MCSymbol*, StubValueTy>&); }; //===----------------------------------------------------------------------===// /// This class contains meta information specific to a module. Queries can be /// made by different debugging and exception handling schemes and reformated /// for specific use. /// class MachineModuleInfo { friend class MachineModuleInfoWrapperPass; friend class MachineModuleAnalysis; const LLVMTargetMachine &TM; /// This is the MCContext used for the entire code generator. MCContext Context; /// This is the LLVM Module being worked on. const Module *TheModule; /// This is the object-file-format-specific implementation of /// MachineModuleInfoImpl, which lets targets accumulate whatever info they /// want. MachineModuleInfoImpl *ObjFileMMI; /// \name Exception Handling /// \{ /// Vector of all personality functions ever seen. Used to emit common EH /// frames. std::vector<const Function *> Personalities; /// The current call site index being processed, if any. 0 if none. unsigned CurCallSite; /// \} /// This map keeps track of which symbol is being used for the specified /// basic block's address of label. MMIAddrLabelMap *AddrLabelSymbols; // TODO: Ideally, what we'd like is to have a switch that allows emitting // synchronous (precise at call-sites only) CFA into .eh_frame. However, // even under this switch, we'd like .debug_frame to be precise when using // -g. At this moment, there's no way to specify that some CFI directives // go into .eh_frame only, while others go into .debug_frame only. /// True if debugging information is available in this module. bool DbgInfoAvailable; /// True if this module is being built for windows/msvc, and uses floating /// point. This is used to emit an undefined reference to _fltused. bool UsesMSVCFloatingPoint; /// True if the module calls the __morestack function indirectly, as is /// required under the large code model on x86. This is used to emit /// a definition of a symbol, __morestack_addr, containing the address. See /// comments in lib/Target/X86/X86FrameLowering.cpp for more details. bool UsesMorestackAddr; /// True if the module contains split-stack functions. This is used to /// emit .note.GNU-split-stack section as required by the linker for /// special handling split-stack function calling no-split-stack function. bool HasSplitStack; /// True if the module contains no-split-stack functions. This is used to /// emit .note.GNU-no-split-stack section when it also contains split-stack /// functions. bool HasNosplitStack; /// Maps IR Functions to their corresponding MachineFunctions. DenseMap<const Function*, std::unique_ptr<MachineFunction>> MachineFunctions; /// Next unique number available for a MachineFunction. unsigned NextFnNum = 0; const Function *LastRequest = nullptr; ///< Used for shortcut/cache. MachineFunction *LastResult = nullptr; ///< Used for shortcut/cache. MachineModuleInfo &operator=(MachineModuleInfo &&MMII) = delete; public: explicit MachineModuleInfo(const LLVMTargetMachine *TM = nullptr); MachineModuleInfo(MachineModuleInfo &&MMII); ~MachineModuleInfo(); void initialize(); void finalize(); const LLVMTargetMachine &getTarget() const { return TM; } const MCContext &getContext() const { return Context; } MCContext &getContext() { return Context; } const Module *getModule() const { return TheModule; } /// Returns the MachineFunction constructed for the IR function \p F. /// Creates a new MachineFunction if none exists yet. MachineFunction &getOrCreateMachineFunction(Function &F); /// \brief Returns the MachineFunction associated to IR function \p F if there /// is one, otherwise nullptr. MachineFunction *getMachineFunction(const Function &F) const; /// Delete the MachineFunction \p MF and reset the link in the IR Function to /// Machine Function map. void deleteMachineFunctionFor(Function &F); /// Keep track of various per-function pieces of information for backends /// that would like to do so. template<typename Ty> Ty &getObjFileInfo() { if (ObjFileMMI == nullptr) ObjFileMMI = new Ty(*this); return *static_cast<Ty*>(ObjFileMMI); } template<typename Ty> const Ty &getObjFileInfo() const { return const_cast<MachineModuleInfo*>(this)->getObjFileInfo<Ty>(); } /// Returns true if valid debug info is present. bool hasDebugInfo() const { return DbgInfoAvailable; } void setDebugInfoAvailability(bool avail) { DbgInfoAvailable = avail; } bool usesMSVCFloatingPoint() const { return UsesMSVCFloatingPoint; } void setUsesMSVCFloatingPoint(bool b) { UsesMSVCFloatingPoint = b; } bool usesMorestackAddr() const { return UsesMorestackAddr; } void setUsesMorestackAddr(bool b) { UsesMorestackAddr = b; } bool hasSplitStack() const { return HasSplitStack; } void setHasSplitStack(bool b) { HasSplitStack = b; } bool hasNosplitStack() const { return HasNosplitStack; } void setHasNosplitStack(bool b) { HasNosplitStack = b; } /// Return the symbol to be used for the specified basic block when its /// address is taken. This cannot be its normal LBB label because the block /// may be accessed outside its containing function. MCSymbol *getAddrLabelSymbol(const BasicBlock *BB) { return getAddrLabelSymbolToEmit(BB).front(); } /// Return the symbol to be used for the specified basic block when its /// address is taken. If other blocks were RAUW'd to this one, we may have /// to emit them as well, return the whole set. ArrayRef<MCSymbol *> getAddrLabelSymbolToEmit(const BasicBlock *BB); /// \name Exception Handling /// \{ /// Set the call site currently being processed. void setCurrentCallSite(unsigned Site) { CurCallSite = Site; } /// Get the call site currently being processed, if any. return zero if /// none. unsigned getCurrentCallSite() { return CurCallSite; } /// Provide the personality function for the exception information. void addPersonality(const Function *Personality); /// Return array of personality functions ever seen. const std::vector<const Function *>& getPersonalities() const { return Personalities; } /// \} }; // End class MachineModuleInfo class MachineModuleInfoWrapperPass : public ImmutablePass { MachineModuleInfo MMI; public: static char ID; // Pass identification, replacement for typeid explicit MachineModuleInfoWrapperPass(const LLVMTargetMachine *TM = nullptr); // Initialization and Finalization bool doInitialization(Module &) override; bool doFinalization(Module &) override; MachineModuleInfo &getMMI() { return MMI; } const MachineModuleInfo &getMMI() const { return MMI; } }; /// An analysis that produces \c MachineInfo for a module. class MachineModuleAnalysis : public AnalysisInfoMixin<MachineModuleAnalysis> { friend AnalysisInfoMixin<MachineModuleAnalysis>; static AnalysisKey Key; const LLVMTargetMachine *TM; public: /// Provide the result type for this analysis pass. using Result = MachineModuleInfo; MachineModuleAnalysis(const LLVMTargetMachine *TM) : TM(TM) {} /// Run the analysis pass and produce machine module information. MachineModuleInfo run(Module &M, ModuleAnalysisManager &); }; } // end namespace llvm #endif // LLVM_CODEGEN_MACHINEMODULEINFO_H
Upload File
Create Folder