diff options
author | Chris Lattner <sabre@nondot.org> | 2011-01-03 23:38:13 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-01-03 23:38:13 +0000 |
commit | bde6ec1db6fd3a2d8d4022baa4e0735b3d01f613 (patch) | |
tree | d86c596466a92fffbfe1f0761a590c601ba3f970 /llvm/lib/Transforms | |
parent | cd12b63b47aeee69b5c95135e97f0cd058423e7d (diff) | |
download | bcm5719-llvm-bde6ec1db6fd3a2d8d4022baa4e0735b3d01f613.tar.gz bcm5719-llvm-bde6ec1db6fd3a2d8d4022baa4e0735b3d01f613.zip |
Duncan deftly points out that readnone functions aren't
invalidated by stores, so they can be handled as 'simple'
operations.
llvm-svn: 122785
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/EarlyCSE.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp index 6c2ea39896a..3d3f17b26fc 100644 --- a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp +++ b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp @@ -56,6 +56,9 @@ namespace { } static bool canHandle(Instruction *Inst) { + // This can only handle non-void readnone functions. + if (CallInst *CI = dyn_cast<CallInst>(Inst)) + return CI->doesNotAccessMemory() && !CI->getType()->isVoidTy(); return isa<CastInst>(Inst) || isa<BinaryOperator>(Inst) || isa<GetElementPtrInst>(Inst) || isa<CmpInst>(Inst) || isa<SelectInst>(Inst) || isa<ExtractElementInst>(Inst) || @@ -105,7 +108,8 @@ unsigned DenseMapInfo<SimpleValue>::getHashValue(SimpleValue Val) { Res ^= *I; } else { // nothing extra to hash in. - assert((isa<BinaryOperator>(Inst) || isa<GetElementPtrInst>(Inst) || + assert((isa<CallInst>(Inst) || + isa<BinaryOperator>(Inst) || isa<GetElementPtrInst>(Inst) || isa<SelectInst>(Inst) || isa<ExtractElementInst>(Inst) || isa<InsertElementInst>(Inst) || isa<ShuffleVectorInst>(Inst)) && "Invalid/unknown instruction"); |