[llvm] r333763 - [DAG] Prune store merge legal store check to stop invalid size. NFCI.

Nirav Dave via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 1 08:04:40 PDT 2018


Author: niravd
Date: Fri Jun  1 08:04:40 2018
New Revision: 333763

URL: http://llvm.org/viewvc/llvm-project?rev=333763&view=rev
Log:
[DAG] Prune store merge legal store check to stop invalid size. NFCI.

Do not consider store sizes large than the maximum legal store size.

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=333763&r1=333762&r2=333763&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Jun  1 08:04:40 2018
@@ -13555,6 +13555,11 @@ bool DAGCombiner::MergeConsecutiveStores
         unsigned SizeInBits = (i + 1) * ElementSizeBytes * 8;
         EVT StoreTy = EVT::getIntegerVT(Context, SizeInBits);
         bool IsFast = false;
+
+        // Break early when size is too large to be legal.
+        if (StoreTy.getSizeInBits() > MaximumLegalStoreInBits)
+          break;
+
         if (TLI.isTypeLegal(StoreTy) &&
             TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
             TLI.allowsMemoryAccess(Context, DL, StoreTy, FirstStoreAS,
@@ -13658,6 +13663,11 @@ bool DAGCombiner::MergeConsecutiveStores
         EVT Ty =
             EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(), Elts);
         bool IsFast;
+
+        // Break early when size is too large to be legal.
+        if (Ty.getSizeInBits() > MaximumLegalStoreInBits)
+          break;
+
         if (TLI.isTypeLegal(Ty) &&
             TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) &&
             TLI.allowsMemoryAccess(Context, DL, Ty, FirstStoreAS,
@@ -13715,6 +13725,7 @@ bool DAGCombiner::MergeConsecutiveStores
     // Find acceptable loads. Loads need to have the same chain (token factor),
     // must not be zext, volatile, indexed, and they must be consecutive.
     BaseIndexOffset LdBasePtr;
+
     for (unsigned i = 0; i < NumConsecutiveStores; ++i) {
       StoreSDNode *St = cast<StoreSDNode>(StoreNodes[i].MemNode);
       SDValue Val = peekThroughBitcast(St->getValue());
@@ -13784,6 +13795,10 @@ bool DAGCombiner::MergeConsecutiveStores
       unsigned Elts = (i + 1) * NumMemElts;
       EVT StoreTy = EVT::getVectorVT(Context, MemVT.getScalarType(), Elts);
 
+      // Break early when size is too large to be legal.
+      if (StoreTy.getSizeInBits() > MaximumLegalStoreInBits)
+        break;
+
       bool IsFastSt, IsFastLd;
       if (TLI.isTypeLegal(StoreTy) &&
           TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&




More information about the llvm-commits mailing list