LLVM: lib/CodeGen/MachineModuleSlotTracker.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
13
14using namespace llvm;
15
16void MachineModuleSlotTracker::processMachineFunctionMetadata(
18
19 for (const MachineBasicBlock &MBB : MF)
20 for (const MachineInstr &MI : MBB.instrs())
21 for (const MachineMemOperand *MMO : MI.memoperands()) {
22 AAMDNodes AAInfo = MMO->getAAInfo();
23 if (AAInfo.TBAA)
31 }
32}
33
34void MachineModuleSlotTracker::processMachineModule(
36 bool ShouldInitializeAllMetadata) {
37 if (ShouldInitializeAllMetadata) {
38 for (const Function &F : *M) {
39 if (&F != &TheFunction)
40 continue;
42 if (auto *MF = TheMMI.getMachineFunction(F))
43 processMachineFunctionMetadata(AST, *MF);
45 break;
46 }
47 }
48}
49
50void MachineModuleSlotTracker::processMachineFunction(
52 bool ShouldInitializeAllMetadata) {
53 if (!ShouldInitializeAllMetadata && F == &TheFunction) {
55 if (auto *MF = TheMMI.getMachineFunction(*F))
56 processMachineFunctionMetadata(AST, *MF);
58 }
59}
60
65
68 bool ShouldInitializeAllMetadata)
70 ShouldInitializeAllMetadata),
71 TheFunction(MF->getFunction()), TheMMI(MMI) {
73 bool ShouldInitializeAllMetadata) {
74 this->processMachineModule(AST, M, ShouldInitializeAllMetadata);
75 });
77 bool ShouldInitializeAllMetadata) {
78 this->processMachineFunction(AST, F, ShouldInitializeAllMetadata);
79 });
80}
81
static const Function * getParent(const Value *V)
Module.h This file contains the declarations for the Module class.
static Function * getFunction(FunctionType *Ty, const Twine &Name, Module *M)
Abstract interface of slot tracker storage.
virtual unsigned getNextMetadataSlot()=0
virtual void createMetadataSlot(const MDNode *)=0
This class contains meta information specific to a module.
~MachineModuleSlotTracker() override
void collectMachineMDNodes(MachineMDNodeListType &L) const
Definition MachineModuleSlotTracker.cpp:61
MachineModuleSlotTracker(const MachineModuleInfo &MMI, const MachineFunction *MF, bool ShouldInitializeAllMetadata=true)
Definition MachineModuleSlotTracker.cpp:66
ModuleSlotTracker(SlotTracker &Machine, const Module *M, const Function *F=nullptr)
Wrap a preinitialized SlotTracker.
std::vector< std::pair< unsigned, const MDNode * > > MachineMDNodeListType
void collectMDNodes(MachineMDNodeListType &L, unsigned LB, unsigned UB) const
void setProcessHook(std::function< void(AbstractSlotTrackerStorage *, const Module *, bool)>)
A Module instance is used to store all the information related to an LLVM module.
This is an optimization pass for GlobalISel generic memory operations.
MDNode * TBAAStruct
The tag for type-based alias analysis (tbaa struct).
MDNode * Scope
The tag for alias scope specification (used with noalias).
MDNode * TBAA
The tag for type-based alias analysis.
MDNode * NoAlias
The tag specifying the noalias scope.