Lines Matching defs:MemoryAccess
274 // For memory, we also track a representative MemoryAccess, and a set of memory
327 const MemoryAccess *getMemoryLeader() const { return RepMemoryAccess; }
328 void setMemoryLeader(const MemoryAccess *Leader) { RepMemoryAccess = Leader; }
407 const MemoryAccess *RepMemoryAccess = nullptr;
557 // Map from temporary operation to MemoryAccess.
584 mutable DenseMap<const MemoryAccess *, SmallPtrSet<MemoryAccess *, 2>>
589 // We could use the congruence class machinery, but the MemoryAccess's are
592 DenseMap<const MemoryAccess *, CongruenceClass *> MemoryAccessToClass;
727 const MemoryAccess *) const;
729 const MemoryAccess *) const;
731 const MemoryAccess *) const;
743 CongruenceClass *createMemoryClass(MemoryAccess *MA) {
749 CongruenceClass *ensureLeaderOfMemoryClass(MemoryAccess *MA) {
768 MemoryAccess *MemAccess, Instruction *OrigInst,
785 MemoryAccess *) const;
804 void moveMemoryToNewCongruenceClass(Instruction *, MemoryAccess *,
807 const MemoryAccess *getNextMemoryLeader(CongruenceClass *) const;
808 bool setMemoryClass(const MemoryAccess *From, CongruenceClass *To);
809 CongruenceClass *getMemoryClass(const MemoryAccess *MA) const;
810 const MemoryAccess *lookupMemoryLeader(const MemoryAccess *) const;
811 bool isMemoryAccessTOP(const MemoryAccess *) const;
844 void markMemoryUsersTouched(const MemoryAccess *);
845 void markMemoryDefTouched(const MemoryAccess *);
850 void addMemoryUsers(const MemoryAccess *To, MemoryAccess *U) const;
864 bool singleReachablePHIPath(SmallPtrSet<const MemoryAccess *, 8> &,
865 const MemoryAccess *, const MemoryAccess *) const;
877 unsigned InstrToDFSNum(const MemoryAccess *MA) const {
883 // Given a MemoryAccess, return the relevant instruction DFS number. Note:
885 // auto-convert to Value's but not to MemoryAccess's.
887 assert(isa<MemoryAccess>(MA) &&
938 // Get a MemoryAccess for an instruction, fake or real.
1279 NewGVN::createCallExpression(CallInst *CI, const MemoryAccess *MA) const {
1346 const MemoryAccess *NewGVN::lookupMemoryLeader(const MemoryAccess *MA) const {
1349 "Every MemoryAccess should be mapped to a congruence class with a "
1354 // Return true if the MemoryAccess is really equivalent to everything. This is
1357 bool NewGVN::isMemoryAccessTOP(const MemoryAccess *MA) const {
1363 const MemoryAccess *MA) const {
1380 NewGVN::createStoreExpression(StoreInst *SI, const MemoryAccess *MA) const {
1403 const MemoryAccess *StoreRHS = StoreAccess->getDefiningAccess();
1451 MemoryAccess *DefiningAccess) const {
1534 MemoryAccess *OriginalAccess = getMemoryAccess(I);
1535 MemoryAccess *DefiningAccess =
1647 // Retrieve the memory class for a given MemoryAccess.
1648 CongruenceClass *NewGVN::getMemoryClass(const MemoryAccess *MA) const {
1654 // Update the MemoryAccess equivalence table to say that From is equal to To,
1656 bool NewGVN::setMemoryClass(const MemoryAccess *From,
1659 "Every MemoryAccess should be getting mapped to a non-null class");
1663 << " with current MemoryAccess leader ");
2095 void NewGVN::addMemoryUsers(const MemoryAccess *To, MemoryAccess *U) const {
2100 void NewGVN::markMemoryDefTouched(const MemoryAccess *MA) {
2104 void NewGVN::markMemoryUsersTouched(const MemoryAccess *MA) {
2146 // This function returns the MemoryAccess that should be the next leader of
2149 const MemoryAccess *NewGVN::getNextMemoryLeader(CongruenceClass *CC) const {
2193 // Move a MemoryAccess, currently in OldClass, to NewClass, including updates to
2203 MemoryAccess *InstMA,
2206 // If the leader is I, and we had a representative MemoryAccess, it should
2207 // be the MemoryAccess of OldClass.
2212 "Representative MemoryAccess mismatch");
2278 // We rely on the code below handling the MemoryAccess change.
2285 // If it's not a memory use, set the MemoryAccess equivalence
2408 if (MemoryAccess *MA = getMemoryAccess(I))
2453 if (MemoryAccess *MemPhi = getMemoryAccess(To))
2658 MemoryAccess *MemAccess, Instruction *OrigInst,
2877 // MemoryAccess, it is *not* the same as the actual live on entry def. We
2879 // should be checking whether the MemoryAccess is top if we want to know if it
2996 if (MemoryAccess *MemPhi = getMemoryAccess(B)) {
3044 return cast<MemoryAccess>(U) != MP &&
3045 !isMemoryAccessTOP(cast<MemoryAccess>(U)) &&
3060 return lookupMemoryLeader(cast<MemoryAccess>(U));
3071 [&AllSameValue](const MemoryAccess *V) { return V == AllSameValue; });
3141 SmallPtrSet<const MemoryAccess *, 8> &Visited, const MemoryAccess *First,
3142 const MemoryAccess *Second) const {
3152 // MemoryAccess and return true when we hit a cycle.
3174 return singleReachablePHIPath(Visited, cast<MemoryAccess>(OperandList[0]),
3200 "Representative MemoryAccess does not appear to be reverse "
3207 // Anything equivalent in the MemoryAccess table should be in the same
3213 [&](const std::pair<const MemoryAccess *, CongruenceClass *> Pair) {
3241 SmallPtrSet<const MemoryAccess *, 8> VisitedMAS;