add a list of opportunities for future improvement.
authorChris Lattner <sabre@nondot.org>
Sun, 2 Jan 2011 18:32:09 +0000 (18:32 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 2 Jan 2011 18:32:09 +0000 (18:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122701 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopIdiomRecognize.cpp

index 84e33f062b0a180bcd3475c34dbc136c44498447..72fee7012e1d2af514f5f6d5314161bf73fc544f 100644 (file)
 // performance win.
 //
 //===----------------------------------------------------------------------===//
+//
+// TODO List:
+//
+// Future loop memory idioms to recognize:
+//   memcmp, memmove, strlen, etc.
+// Future floating point idioms to recognize in -ffast-math mode:
+//   fpowi
+// Future integer operation idioms to recognize:
+//   ctpop, ctlz, cttz
+//
+// Beware that isel's default lowering for ctpop is highly inefficient for
+// i64 and larger types when i64 is legal and the value has few bits set.  It
+// would be good to enhance isel to emit a loop for ctpop in this case.
+//
+// We should enhance the memset/memcpy recognition to handle multiple stores in
+// the loop.  This would handle things like:
+//   void foo(_Complex float *P)
+//     for (i) { __real__(*P) = 0;  __imag__(*P) = 0; }
+// this is also "Example 2" from http://blog.regehr.org/archives/320
+//  
+//===----------------------------------------------------------------------===//
 
 #define DEBUG_TYPE "loop-idiom"
 #include "llvm/Transforms/Scalar.h"
@@ -326,7 +347,7 @@ processLoopStoreOfLoopLoad(StoreInst *SI, unsigned StoreSize,
   LoadInst *LI = cast<LoadInst>(SI->getValueOperand());
   
   // Okay, we have a strided store "p[i]" of a loaded value.  We can turn
-  // this into a memcmp in the loop preheader now if we want.  However, this
+  // this into a memcpy in the loop preheader now if we want.  However, this
   // would be unsafe to do if there is anything else in the loop that may read
   // or write to the aliased location (including the load feeding the stores).
   // Check for an alias.