[PATCH] D34566: [loop idiom Recognition] support memcpy for multiple consecutive loads and stores

Haicheng Wu via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 9 10:05:43 PDT 2017

haicheng added inline comments.

Comment at: lib/Transforms/Scalar/LoopIdiomRecognize.cpp:134
   bool processLoopStores(SmallVectorImpl<StoreInst *> &SL, const SCEV *BECount,
-                         bool ForMemset);
+                         bool ForMemset,bool ForMemcpy);
   bool processLoopMemSet(MemSetInst *MSI, const SCEV *BECount);
I think you can pass in an enum which has value ForMemset, ForMemsetPattern, ForMemcpy like LegalStoreKind above or just use LegalStoreKind if possible.

Comment at: lib/Transforms/Scalar/LoopIdiomRecognize.cpp:651-675
+      } else {
+        LoadInst *SecondStoreLoad = cast<LoadInst>(SL[k]->getValueOperand());
+        assert(SecondStoreLoad->isUnordered() &&
+               "Expected only non-volatile non-ordered loads.");
+        Value *SecondLoadPtr =
+            GetUnderlyingObject(SecondStoreLoad->getPointerOperand(), *DL);
I think code here can refactor with code above

Comment at: lib/Transforms/Scalar/LoopIdiomRecognize.cpp:737
+    } else {
+        if (processLoopStoreOfLoopLoad(StorePtr, StoreSize, HeadStore,
+                                     StoreLoadInst, AdjacentStores, StoreEv,
I think processLoopStoreOfLoopLoad() can refactor with processLoopStridedStore(), then you don't need if...else... here.


More information about the llvm-commits mailing list