Home | History | Annotate | Download | only in Analysis

Lines Matching refs:MemoryAccess

108 class MemoryAccess;
117 // Used to signify what the default invalid ID is for MemoryAccess's
123 using memoryaccess_def_iterator = memoryaccess_def_iterator_base<MemoryAccess>;
125 memoryaccess_def_iterator_base<const MemoryAccess>;
129 class MemoryAccess
131 public ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>,
132 public ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>> {
135 ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>;
137 ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>>;
146 MemoryAccess(const MemoryAccess &) = delete;
147 MemoryAccess &operator=(const MemoryAccess &) = delete;
148 ~MemoryAccess() override;
163 /// MemoryAccess. For MemoryPhi nodes, this walks arguments. For
204 /// \brief Used by MemorySSA to change the block of a MemoryAccess when it is
212 MemoryAccess(LLVMContext &C, unsigned Vty, BasicBlock *BB,
220 inline raw_ostream &operator<<(raw_ostream &OS, const MemoryAccess &MA) {
232 class MemoryUseOrDef : public MemoryAccess {
237 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
243 MemoryAccess *getDefiningAccess() const { return getOperand(0); }
252 virtual MemoryAccess *getOptimized() const = 0;
253 virtual void setOptimized(MemoryAccess *) = 0;
263 MemoryUseOrDef(LLVMContext &C, MemoryAccess *DMA, unsigned Vty,
265 : MemoryAccess(C, Vty, BB, 1), MemoryInst(MI) {
268 void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false) {
283 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUseOrDef, MemoryAccess)
292 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
294 MemoryUse(LLVMContext &C, MemoryAccess *DMA, Instruction *MI, BasicBlock *BB)
307 virtual void setOptimized(MemoryAccess *DMA) override {
316 virtual MemoryAccess *getOptimized() const override {
336 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUse, MemoryAccess)
349 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
351 MemoryDef(LLVMContext &C, MemoryAccess *DMA, Instruction *MI, BasicBlock *BB,
364 virtual void setOptimized(MemoryAccess *MA) override {
368 virtual MemoryAccess *getOptimized() const override { return Optimized; }
386 MemoryAccess *Optimized;
392 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryDef, MemoryAccess)
426 class MemoryPhi final : public MemoryAccess {
432 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
435 : MemoryAccess(C, MemoryPhiVal, BB, 0), ID(Ver), ReservedSpace(NumPreds) {
479 MemoryAccess *getIncomingValue(unsigned I) const { return getOperand(I); }
480 void setIncomingValue(unsigned I, MemoryAccess *V) {
499 BasicBlock *getIncomingBlock(MemoryAccess::const_user_iterator I) const {
509 void addIncoming(MemoryAccess *V, BasicBlock *BB) {
567 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryPhi, MemoryAccess)
597 inline bool isLiveOnEntryDef(const MemoryAccess *MA) const {
601 inline MemoryAccess *getLiveOnEntryDef() const {
610 using AccessList = iplist<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>;
612 simple_ilist<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>>;
614 /// \brief Return the list of MemoryAccess's for a given basic block.
630 /// whether MemoryAccess \p A dominates MemoryAccess \p B.
631 bool locallyDominates(const MemoryAccess *A, const MemoryAccess *B) const;
634 /// determine whether MemoryAccess \p A dominates MemoryAccess \p B.
635 bool dominates(const MemoryAccess *A, const MemoryAccess *B) const;
637 /// \brief Given a MemoryAccess and a Use, determine whether MemoryAccess \p A
639 bool dominates(const MemoryAccess *A, const Use &B) const;
678 void renamePass(BasicBlock *BB, MemoryAccess *IncomingVal,
682 void removeFromLookups(MemoryAccess *);
683 void removeFromLists(MemoryAccess *, bool ShouldDelete = true);
684 void insertIntoListsForBlock(MemoryAccess *, const BasicBlock *,
686 void insertIntoListsBefore(MemoryAccess *, const BasicBlock *,
688 MemoryUseOrDef *createDefinedAccess(Instruction *, MemoryAccess *);
698 void verifyUseInDefs(MemoryAccess *, MemoryAccess *) const;
705 bool dominatesUse(const MemoryAccess *, const MemoryAccess *) const;
708 MemoryAccess *findDominatingDef(BasicBlock *, enum InsertionPlace);
711 MemoryAccess *renameBlock(BasicBlock *, MemoryAccess *, bool);
712 void renameSuccessorPhis(BasicBlock *, MemoryAccess *, bool);
713 void renamePass(DomTreeNode *, MemoryAccess *IncomingVal,
724 DenseMap<const Value *, MemoryAccess *> ValueToMemoryAccess;
733 std::unique_ptr<MemoryAccess> LiveOnEntryDef;
739 mutable DenseMap<const MemoryAccess *, unsigned long> BlockNumbering;
841 using MemoryAccessSet = SmallVector<MemoryAccess *, 8>;
844 /// will give you the nearest dominating MemoryAccess that Mod's the location
865 MemoryAccess *getClobberingMemoryAccess(const Instruction *I) {
866 MemoryAccess *MA = MSSA->getMemoryAccess(I);
872 /// but takes a MemoryAccess instead of an Instruction.
873 virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *) = 0;
876 /// calling this will give you the nearest dominating clobbering MemoryAccess
886 virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *,
894 virtual void invalidateInfo(MemoryAccess *) {}
912 MemoryAccess *getClobberingMemoryAccess(MemoryAccess *) override;
913 MemoryAccess *getClobberingMemoryAccess(MemoryAccess *,
917 using MemoryAccessPair = std::pair<MemoryAccess *, MemoryLocation>;
918 using ConstMemoryAccessPair = std::pair<const MemoryAccess *, MemoryLocation>;
921 /// over the defining accesses of a MemoryAccess.
975 inline memoryaccess_def_iterator MemoryAccess::defs_begin() {
979 inline const_memoryaccess_def_iterator MemoryAccess::defs_begin() const {
983 inline memoryaccess_def_iterator MemoryAccess::defs_end() {
987 inline const_memoryaccess_def_iterator MemoryAccess::defs_end() const {
991 /// \brief GraphTraits for a MemoryAccess, which walks defs in the normal case,
993 template <> struct GraphTraits<MemoryAccess *> {
994 using NodeRef = MemoryAccess *;
1002 template <> struct GraphTraits<Inverse<MemoryAccess *>> {
1003 using NodeRef = MemoryAccess *;
1004 using ChildIteratorType = MemoryAccess::iterator;
1017 /// <MemoryAccess,MemoryLocation>, and walks defs, properly translating the
1080 MemoryAccess *OriginalAccess = nullptr;
1111 std::forward_iterator_tag, MemoryAccess *> {
1139 def_chain(T MA, MemoryAccess *UpTo = nullptr) {