Lines Matching defs:StoreNodes

777     SDValue getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
783 bool hasSameUnderlyingObj(ArrayRef<MemOpLink> StoreNodes);
789 bool mergeStoresOfConstantsOrVecElts(SmallVectorImpl<MemOpLink> &StoreNodes,
795 /// potentially may be merged with St are placed in StoreNodes. On success,
798 SmallVectorImpl<MemOpLink> &StoreNodes);
805 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores,
811 unsigned getConsecutiveStores(SmallVectorImpl<MemOpLink> &StoreNodes,
816 bool tryStoreMergeOfConstants(SmallVectorImpl<MemOpLink> &StoreNodes,
824 bool tryStoreMergeOfExtracts(SmallVectorImpl<MemOpLink> &StoreNodes,
830 bool tryStoreMergeOfLoads(SmallVectorImpl<MemOpLink> &StoreNodes,
20585 SDValue DAGCombiner::getMergeStoreChains(SmallVectorImpl<MemOpLink> &StoreNodes,
20589 SDLoc StoreDL(StoreNodes[0].MemNode);
20592 Visited.insert(StoreNodes[i].MemNode);
20597 if (Visited.insert(StoreNodes[i].MemNode->getChain().getNode()).second)
20598 Chains.push_back(StoreNodes[i].MemNode->getChain());
20605 bool DAGCombiner::hasSameUnderlyingObj(ArrayRef<MemOpLink> StoreNodes) {
20607 for (const auto &MemOp : StoreNodes) {
20630 SmallVectorImpl<MemOpLink> &StoreNodes, EVT MemVT, unsigned NumStores,
20640 SDLoc DL(StoreNodes[0].MemNode);
20649 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[I].MemNode);
20675 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[I].MemNode);
20707 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
20753 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[Idx].MemNode);
20783 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
20784 SDValue NewChain = getMergeStoreChains(StoreNodes, NumStores);
20785 bool CanReusePtrInfo = hasSameUnderlyingObj(StoreNodes);
20819 CombineTo(StoreNodes[i].MemNode, NewStore);
20827 SmallVectorImpl<MemOpLink> &StoreNodes) {
20964 StoreNodes.push_back(MemOpLink(OtherStore, PtrDiff));
21000 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumStores,
21029 SDNode *N = StoreNodes[i].MemNode;
21051 if (SDNode::hasPredecessorHelper(StoreNodes[i].MemNode, Visited, Worklist,
21055 // we won't add the StoreNode into StoreNodes set again.
21057 auto &RootCount = StoreRootCountMap[StoreNodes[i].MemNode];
21069 DAGCombiner::getConsecutiveStores(SmallVectorImpl<MemOpLink> &StoreNodes,
21074 while ((StartIdx + 1 < StoreNodes.size()) &&
21075 StoreNodes[StartIdx].OffsetFromBase + ElementSizeBytes !=
21076 StoreNodes[StartIdx + 1].OffsetFromBase)
21080 if (StartIdx + 1 >= StoreNodes.size())
21085 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + StartIdx);
21090 int64_t StartAddress = StoreNodes[0].OffsetFromBase;
21093 for (unsigned i = 1, e = StoreNodes.size(); i < e; ++i) {
21094 int64_t CurrAddress = StoreNodes[i].OffsetFromBase;
21104 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 1);
21109 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumConsecutiveStores,
21119 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
21128 StoreSDNode *ST = cast<StoreSDNode>(StoreNodes[i].MemNode);
21209 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
21212 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
21218 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumElem,
21220 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21225 MadeChange |= mergeStoresOfConstantsOrVecElts(StoreNodes, MemVT, NumElem,
21230 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21237 SmallVectorImpl<MemOpLink> &StoreNodes, unsigned NumConsecutiveStores,
21246 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
21279 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
21282 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
21288 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumStoresToMerge,
21290 StoreNodes.erase(StoreNodes.begin(),
21291 StoreNodes.begin() + NumStoresToMerge);
21297 StoreNodes, MemVT, NumStoresToMerge, /*IsConstantSrc*/ false,
21300 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumStoresToMerge);
21306 bool DAGCombiner::tryStoreMergeOfLoads(SmallVectorImpl<MemOpLink> &StoreNodes,
21325 StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
21352 StoreNodes[0].MemNode->getAlign() >= RequiredAlignment) {
21353 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + 2);
21368 LSBaseSDNode *FirstInChain = StoreNodes[0].MemNode;
21485 (StoreNodes[NumSkip].MemNode->getAlign() <= FirstStoreAlign))
21487 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumSkip);
21494 if (!checkMergeStoreCandidatesForDependencies(StoreNodes, NumElem,
21496 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21515 SDLoc StoreDL(StoreNodes[0].MemNode);
21520 SDValue NewStoreChain = getMergeStoreChains(StoreNodes, NumElem);
21521 bool CanReusePtrInfo = hasSameUnderlyingObj(StoreNodes);
21536 StMMOFlags |= TLI.getTargetMMOFlags(*StoreNodes[0].MemNode);
21583 SDValue Val = StoreNodes[i].MemNode->getOperand(1);
21584 CombineTo(StoreNodes[i].MemNode, NewStore);
21590 StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem);
21623 SmallVector<MemOpLink, 8> StoreNodes;
21625 SDNode *RootNode = getStoreMergeCandidates(St, StoreNodes);
21628 if (StoreNodes.size() < 2)
21633 llvm::sort(StoreNodes, [](MemOpLink LHS, MemOpLink RHS) {
21649 // front of StoreNodes here.
21651 while (StoreNodes.size() > 1) {
21653 getConsecutiveStores(StoreNodes, ElementSizeBytes);
21662 MadeChange |= tryStoreMergeOfConstants(StoreNodes, NumConsecutiveStores,
21667 MadeChange |= tryStoreMergeOfExtracts(StoreNodes, NumConsecutiveStores,
21672 MadeChange |= tryStoreMergeOfLoads(StoreNodes, NumConsecutiveStores,