Go to the documentation of this file.
15 void MachineModuleSlotTracker::processMachineFunctionMetadata(
33 void MachineModuleSlotTracker::processMachineModule(
35 bool ShouldInitializeAllMetadata) {
36 if (ShouldInitializeAllMetadata) {
38 if (&F != &TheFunction)
42 processMachineFunctionMetadata(AST, *MF);
49 void MachineModuleSlotTracker::processMachineFunction(
51 bool ShouldInitializeAllMetadata) {
52 if (!ShouldInitializeAllMetadata && F == &TheFunction) {
55 processMachineFunctionMetadata(AST, *MF);
68 ShouldInitializeAllMetadata),
69 TheFunction(MF->
getFunction()), TheMMI(MF->getMMI()) {
71 bool ShouldInitializeAllMetadata) {
72 this->processMachineModule(AST,
M, ShouldInitializeAllMetadata);
75 bool ShouldInitializeAllMetadata) {
76 this->processMachineFunction(AST,
F, ShouldInitializeAllMetadata);
This is an optimization pass for GlobalISel generic memory operations.
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
static Function * getFunction(Constant *C)
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
MDNode * TBAAStruct
The tag for type-based alias analysis (tbaa struct).
A description of a memory reference used in the backend.
MDNode * Scope
The tag for alias scope specification (used with noalias).
Manage lifetime of a slot tracker for printing IR.
virtual unsigned getNextMetadataSlot()=0
void collectMDNodes(MachineMDNodeListType &L, unsigned LB, unsigned UB) const
Representation of each machine instruction.
~MachineModuleSlotTracker()
A Module instance is used to store all the information related to an LLVM module.
MachineModuleSlotTracker(const MachineFunction *MF, bool ShouldInitializeAllMetadata=true)
void setProcessHook(std::function< void(AbstractSlotTrackerStorage *, const Module *, bool)>)
virtual void createMetadataSlot(const MDNode *)=0
static const Function * getParent(const Value *V)
std::vector< std::pair< unsigned, const MDNode * > > MachineMDNodeListType
MDNode * NoAlias
The tag specifying the noalias scope.
MachineFunction * getMachineFunction(const Function &F) const
Returns the MachineFunction associated to IR function F if there is one, otherwise nullptr.
MDNode * TBAA
The tag for type-based alias analysis.
Abstract interface of slot tracker storage.
void collectMachineMDNodes(MachineMDNodeListType &L) const