From bdce5720ad878259544e6a4e3621dac32cf2d134 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 2 Jan 2011 18:32:09 +0000 Subject: [PATCH] add a list of opportunities for future improvement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122701 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 23 +++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/lib/Transforms/Scalar/LoopIdiomRecognize.cpp index 84e33f062b0..72fee7012e1 100644 --- a/lib/Transforms/Scalar/LoopIdiomRecognize.cpp +++ b/lib/Transforms/Scalar/LoopIdiomRecognize.cpp @@ -12,6 +12,27 @@ // 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(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.