mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
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
This commit is contained in:
parent
527b47d189
commit
bdce5720ad
@ -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<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.
|
||||
|
Loading…
Reference in New Issue
Block a user