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.