Lines Matching defs:StoreNodes

766     SDValue getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
772 bool hasSameUnderlyingObj(ArrayRef<MemOpLink> StoreNodes);
778 bool mergeStoresOfConstantsOrVecElts(SmallVectorImpl<MemOpLink> &StoreNodes,
784 /// potentially may be merged with St are placed in StoreNodes. On success,
787 SmallVectorImpl<MemOpLink> &StoreNodes);
794 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores,
800 unsigned getConsecutiveStores(SmallVectorImpl<MemOpLink> &StoreNodes,
805 bool tryStoreMergeOfConstants(SmallVectorImpl<MemOpLink> &StoreNodes,
813 bool tryStoreMergeOfExtracts(SmallVectorImpl<MemOpLink> &StoreNodes,
819 bool tryStoreMergeOfLoads(SmallVectorImpl<MemOpLink> &StoreNodes,
20142 SDValue DAGCombiner::getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
20146 SDLoc StoreDL(StoreNodes[0].MemNode);
20149 Visited.insert(StoreNodes[i].MemNode);
20154 if (Visited.insert(StoreNodes[i].MemNode->getChain().getNode()).second)
20155 Chains.push_back(StoreNodes[i].MemNode->getChain());
20162 bool DAGCombiner::hasSameUnderlyingObj(ArrayRef<MemOpLink> StoreNodes) {
20164 for (const auto &MemOp : StoreNodes) {
20187 SmallVectorImpl<MemOpLink> &StoreNodes, EVT MemVT, unsigned NumStores,
20197 SDLoc DL(StoreNodes[0].MemNode);
20206 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[I].MemNode);
20232 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[I].MemNode);
20264 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
20310 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[Idx].MemNode);
20340 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
20341 SDValue NewChain = getMergeStoreChains(StoreNodes, NumStores);
20342 bool CanReusePtrInfo = hasSameUnderlyingObj(StoreNodes);
20376 CombineTo(StoreNodes[i].MemNode, NewStore);
20384 SmallVectorImpl<MemOpLink> &StoreNodes) {
20521 StoreNodes.push_back(MemOpLink(OtherStore, PtrDiff));
20556 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores,
20585 SDNode *N = StoreNodes[i].MemNode;
20607 if (SDNode::hasPredecessorHelper(StoreNodes[i].MemNode, Visited, Worklist,
20611 // we won't add the StoreNode into StoreNodes set again.
20613 auto &RootCount = StoreRootCountMap[StoreNodes[i].MemNode];
20625 DAGCombiner::getConsecutiveStores(SmallVectorImpl<MemOpLink> &StoreNodes,
20630 while ((StartIdx + 1 < StoreNodes.size()) &&
20631 StoreNodes[StartIdx].OffsetFromBase + ElementSizeBytes !=
20632 StoreNodes[StartIdx + 1].OffsetFromBase)
20636 if (StartIdx + 1 >= StoreNodes.size())
20641 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + StartIdx);
20646 int64_t StartAddress = StoreNodes[0].OffsetFromBase;
20649 for (unsigned i = 1, e = StoreNodes.size(); i < e; ++i) {
20650 int64_t CurrAddress = StoreNodes[i].OffsetFromBase;
20660 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 1);
20665 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumConsecutiveStores,
20675 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
20684 StoreSDNode *ST = cast<StoreSDNode>(StoreNodes[i].MemNode);
20765 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
20768 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
20774 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumElem,
20776 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
20781 MadeChange |= mergeStoresOfConstantsOrVecElts(StoreNodes, MemVT, NumElem,
20786 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
20793 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumConsecutiveStores,
20802 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
20835 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
20838 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
20844 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumStoresToMerge,
20846 StoreNodes.erase(StoreNodes.begin(),
20847 StoreNodes.begin() + NumStoresToMerge);
20853 StoreNodes, MemVT, NumStoresToMerge, /*IsConstantSrc*/ false,
20856 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumStoresToMerge);
20862 bool DAGCombiner::tryStoreMergeOfLoads(SmallVectorImpl<MemOpLink> &StoreNodes,
20881 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
20908 StoreNodes[0].MemNode->getAlign() >= RequiredAlignment) {
20909 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 2);
20924 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
21041 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
21043 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
21050 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumElem,
21052 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21071 SDLoc StoreDL(StoreNodes[0].MemNode);
21076 SDValue NewStoreChain = getMergeStoreChains(StoreNodes, NumElem);
21077 bool CanReusePtrInfo = hasSameUnderlyingObj(StoreNodes);
21092 StMMOFlags |= TLI.getTargetMMOFlags(*StoreNodes[0].MemNode);
21139 SDValue Val = StoreNodes[i].MemNode->getOperand(1);
21140 CombineTo(StoreNodes[i].MemNode, NewStore);
21146 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21179 SmallVector<MemOpLink, 8> StoreNodes;
21181 SDNode *RootNode = getStoreMergeCandidates(St, StoreNodes);
21184 if (StoreNodes.size() < 2)
21189 llvm::sort(StoreNodes, [](MemOpLink LHS, MemOpLink RHS) {
21205 // front of StoreNodes here.
21207 while (StoreNodes.size() > 1) {
21209 getConsecutiveStores(StoreNodes, ElementSizeBytes);
21218 MadeChange |= tryStoreMergeOfConstants(StoreNodes, NumConsecutiveStores,
21223 MadeChange |= tryStoreMergeOfExtracts(StoreNodes, NumConsecutiveStores,
21228 MadeChange |= tryStoreMergeOfLoads(StoreNodes, NumConsecutiveStores,