Lines Matching full:store
13 // transformation. The source value of each store then propagated to the user
83 /// Represent a store-to-forwarding candidate.
86 StoreInst *Store; member
88 StoreToLoadForwardingCandidate(LoadInst *Load, StoreInst *Store) in StoreToLoadForwardingCandidate()
89 : Load(Load), Store(Store) {} in StoreToLoadForwardingCandidate()
91 /// Return true if the dependence from the store to the load has an
97 Value *StorePtr = Store->getPointerOperand(); in isDependenceDistanceOfOne()
104 DL.getTypeSizeInBits(getLoadStoreType(Store)) && in isDependenceDistanceOfOne()
142 OS << *Cand.Store << " -->\n"; in operator <<()
151 /// Check if the store dominates all latches, so as long as there is no
152 /// intervening store this value will be loaded in the next iteration.
178 /// this loop and find store->load dependences.
191 // Find store->load dependences (consequently true dep). Both lexically in findStoreToLoadDependences()
218 auto *Store = dyn_cast<StoreInst>(Source); in findStoreToLoadDependences() local
219 if (!Store) in findStoreToLoadDependences()
227 getLoadStoreType(Store), getLoadStoreType(Load), in findStoreToLoadDependences()
228 Store->getDataLayout())) in findStoreToLoadDependences()
231 Candidates.emplace_front(Load, Store); in findStoreToLoadDependences()
270 // If Store is nullptr it means that we have multiple stores forwarding to in removeDependencesFromMultipleStores()
271 // this store. in removeDependencesFromMultipleStores()
291 if (Cand.Store->getParent() == OtherCand->Store->getParent() && in removeDependencesFromMultipleStores()
295 if (getInstrIndex(OtherCand->Store) < getInstrIndex(Cand.Store)) in removeDependencesFromMultipleStores()
319 /// a pointer for a possibly intervening store.
332 /// forwarding store to a load.
366 return getInstrIndex(A.Store) < in findPointersWrittenOnForwardingPath()
367 getInstrIndex(B.Store); in findPointersWrittenOnForwardingPath()
369 ->Store; in findPointersWrittenOnForwardingPath()
371 // We're looking for stores after the first forwarding store until the end in findPointersWrittenOnForwardingPath()
429 // store %y, %gep_i_plus_1 in propagateStoredValueToLoadUsers()
439 // store %y, %gep_i_plus_1 in propagateStoredValueToLoadUsers()
453 // a misleading stepping when debugging. The test update-debugloc-store in propagateStoredValueToLoadUsers()
461 Type *StoreType = Cand.Store->getValueOperand()->getType(); in propagateStoredValueToLoadUsers()
468 Value *StoreValue = Cand.Store->getValueOperand(); in propagateStoredValueToLoadUsers()
472 Cand.Store->getIterator()); in propagateStoredValueToLoadUsers()
485 /// Top-level driver for each loop: find store->load forwarding
491 // Look for store-to-load forwarding cases across the in processLoop()
497 // store %y, %gep_i_plus_1 in processLoop()
507 // store %y, %gep_i_plus_1 in processLoop()
509 // First start with store->load dependences. in processLoop()
514 // Generate an index for each load and store according to the original in processLoop()
531 if (!doesStoreDominatesAllLatches(Cand.Store->getParent(), L, DT)) in processLoop()
548 isa<SCEVAddRecExpr>(PSE.getSCEV(Cand.Store->getPointerOperand())) && in processLoop()
555 << ". Valid store-to-load forwarding across the loop backedge\n"); in processLoop()
613 PSE.getSCEV(Cand.Store->getPointerOperand())); in processLoop()
618 // Next, propagate the value stored by the store to the users of the load. in processLoop()
632 /// Maps the load/store instructions to their index according to