• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/llvm-project/llvm/include/llvm/Analysis/

Lines Matching refs:MemoryAccess

113 class MemoryAccess;
126 // Used to signify what the default invalid ID is for MemoryAccess's
132 using memoryaccess_def_iterator = memoryaccess_def_iterator_base<MemoryAccess>;
134 memoryaccess_def_iterator_base<const MemoryAccess>;
138 class MemoryAccess
140 public ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>,
141 public ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>> {
144 ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>;
146 ilist_node<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>>;
148 MemoryAccess(const MemoryAccess &) = delete;
149 MemoryAccess &operator=(const MemoryAccess &) = delete;
170 /// MemoryAccess. For MemoryPhi nodes, this walks arguments. For
211 /// Used by MemorySSA to change the block of a MemoryAccess when it is
219 MemoryAccess(LLVMContext &C, unsigned Vty, DeleteValueTy DeleteValue,
224 // Use deleteValue() to delete a generic MemoryAccess.
225 ~MemoryAccess() = default;
232 struct ilist_alloc_traits<MemoryAccess> {
233 static void deleteNode(MemoryAccess *MA) { MA->deleteValue(); }
236 inline raw_ostream &operator<<(raw_ostream &OS, const MemoryAccess &MA) {
248 class MemoryUseOrDef : public MemoryAccess {
252 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
258 MemoryAccess *getDefiningAccess() const { return getOperand(0); }
267 inline MemoryAccess *getOptimized() const;
268 inline void setOptimized(MemoryAccess *);
285 MemoryUseOrDef(LLVMContext &C, MemoryAccess *DMA, unsigned Vty,
288 : MemoryAccess(C, Vty, DeleteValue, BB, NumOperands),
300 void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false,
322 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
324 MemoryUse(LLVMContext &C, MemoryAccess *DMA, Instruction *MI, BasicBlock *BB)
337 void setOptimized(MemoryAccess *DMA) {
346 MemoryAccess *getOptimized() const {
365 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUse, MemoryAccess)
380 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
382 MemoryDef(LLVMContext &C, MemoryAccess *DMA, Instruction *MI, BasicBlock *BB,
395 void setOptimized(MemoryAccess *MA) {
400 MemoryAccess *getOptimized() const {
401 return cast_or_null<MemoryAccess>(getOperand(1));
426 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryDef, MemoryAccess)
448 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUseOrDef, MemoryAccess)
482 class MemoryPhi final : public MemoryAccess {
488 DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
491 : MemoryAccess(C, MemoryPhiVal, deleteMe, BB, 0), ID(Ver),
531 MemoryAccess *getIncomingValue(unsigned I) const { return getOperand(I); }
532 void setIncomingValue(unsigned I, MemoryAccess *V) {
552 BasicBlock *getIncomingBlock(MemoryAccess::const_user_iterator I) const {
562 void addIncoming(MemoryAccess *V, BasicBlock *BB) {
580 MemoryAccess *getIncomingValueForBlock(const BasicBlock *BB) const {
617 [&](const MemoryAccess *, const BasicBlock *B) { return BB == B; });
622 void unorderedDeleteIncomingValue(const MemoryAccess *MA) {
624 [&](const MemoryAccess *M, const BasicBlock *) { return MA == M; });
662 inline unsigned MemoryAccess::getID() const {
676 inline MemoryAccess *MemoryUseOrDef::getOptimized() const {
682 inline void MemoryUseOrDef::setOptimized(MemoryAccess *MA) {
697 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryPhi, MemoryAccess)
738 inline bool isLiveOnEntryDef(const MemoryAccess *MA) const {
742 inline MemoryAccess *getLiveOnEntryDef() const {
751 using AccessList = iplist<MemoryAccess, ilist_tag<MSSAHelpers::AllAccessTag>>;
753 simple_ilist<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>>;
755 /// Return the list of MemoryAccess's for a given basic block.
771 /// whether MemoryAccess \p A dominates MemoryAccess \p B.
772 bool locallyDominates(const MemoryAccess *A, const MemoryAccess *B) const;
775 /// determine whether MemoryAccess \p A dominates MemoryAccess \p B.
776 bool dominates(const MemoryAccess *A, const MemoryAccess *B) const;
778 /// Given a MemoryAccess and a Use, determine whether MemoryAccess \p A
780 bool dominates(const MemoryAccess *A, const Use &B) const;
817 void moveTo(MemoryAccess *What, BasicBlock *BB, InsertionPlace Point);
820 void renamePass(BasicBlock *BB, MemoryAccess *IncomingVal,
825 void removeFromLookups(MemoryAccess *);
826 void removeFromLists(MemoryAccess *, bool ShouldDelete = true);
827 void insertIntoListsForBlock(MemoryAccess *, const BasicBlock *,
829 void insertIntoListsBefore(MemoryAccess *, const BasicBlock *,
831 MemoryUseOrDef *createDefinedAccess(Instruction *, MemoryAccess *,
845 void prepareForMoveTo(MemoryAccess *, BasicBlock *);
846 void verifyUseInDefs(MemoryAccess *, MemoryAccess *) const;
854 bool dominatesUse(const MemoryAccess *, const MemoryAccess *) const;
859 MemoryAccess *findDominatingDef(BasicBlock *, enum InsertionPlace);
861 MemoryAccess *renameBlock(BasicBlock *, MemoryAccess *, bool);
862 void renameSuccessorPhis(BasicBlock *, MemoryAccess *, bool);
863 void renamePass(DomTreeNode *, MemoryAccess *IncomingVal,
874 DenseMap<const Value *, MemoryAccess *> ValueToMemoryAccess;
884 std::unique_ptr<MemoryAccess, ValueDeleter> LiveOnEntryDef;
890 mutable DenseMap<const MemoryAccess *, unsigned long> BlockNumbering;
999 using MemoryAccessSet = SmallVector<MemoryAccess *, 8>;
1002 /// will give you the nearest dominating MemoryAccess that Mod's the location
1023 MemoryAccess *getClobberingMemoryAccess(const Instruction *I) {
1024 MemoryAccess *MA = MSSA->getMemoryAccess(I);
1030 /// but takes a MemoryAccess instead of an Instruction.
1031 virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *) = 0;
1034 /// calling this will give you the nearest dominating clobbering MemoryAccess
1044 virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *,
1052 virtual void invalidateInfo(MemoryAccess *) {}
1068 MemoryAccess *getClobberingMemoryAccess(MemoryAccess *) override;
1069 MemoryAccess *getClobberingMemoryAccess(MemoryAccess *,
1073 using MemoryAccessPair = std::pair<MemoryAccess *, MemoryLocation>;
1074 using ConstMemoryAccessPair = std::pair<const MemoryAccess *, MemoryLocation>;
1077 /// over the defining accesses of a MemoryAccess.
1133 inline memoryaccess_def_iterator MemoryAccess::defs_begin() {
1137 inline const_memoryaccess_def_iterator MemoryAccess::defs_begin() const {
1141 inline memoryaccess_def_iterator MemoryAccess::defs_end() {
1145 inline const_memoryaccess_def_iterator MemoryAccess::defs_end() const {
1149 /// GraphTraits for a MemoryAccess, which walks defs in the normal case,
1151 template <> struct GraphTraits<MemoryAccess *> {
1152 using NodeRef = MemoryAccess *;
1160 template <> struct GraphTraits<Inverse<MemoryAccess *>> {
1161 using NodeRef = MemoryAccess *;
1162 using ChildIteratorType = MemoryAccess::iterator;
1175 /// <MemoryAccess,MemoryLocation>, and walks defs, properly translating the
1242 MemoryAccess *OriginalAccess = nullptr;
1275 std::forward_iterator_tag, MemoryAccess *> {
1303 def_chain(T MA, MemoryAccess *UpTo = nullptr) {