diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-05-06 05:27:34 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-05-06 05:27:34 +0000 |
| commit | a36d52574196824d909d8ff7a2e7d467bf52313b (patch) | |
| tree | e535b6ae63e0704ccba236d76ab823505d0fbcda /llvm/lib/Transforms | |
| parent | b2d3ac8349eb72cf54d255971164f2d0c89bde0d (diff) | |
| download | bcm5719-llvm-a36d52574196824d909d8ff7a2e7d467bf52313b.tar.gz bcm5719-llvm-a36d52574196824d909d8ff7a2e7d467bf52313b.zip | |
DCE intrinsic instructions without side effects.
llvm-svn: 21719
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 4d141533b88..0ed669643e5 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -373,7 +373,26 @@ Constant *llvm::ConstantFoldCall(Function *F, // bool llvm::isInstructionTriviallyDead(Instruction *I) { - return I->use_empty() && !I->mayWriteToMemory() && !isa<TerminatorInst>(I); + if (!I->use_empty() || isa<TerminatorInst>(I)) return false; + + if (!I->mayWriteToMemory()) return true; + + if (CallInst *CI = dyn_cast<CallInst>(I)) + if (Function *F = CI->getCalledFunction()) + switch (F->getIntrinsicID()) { + default: break; + case Intrinsic::vastart: + case Intrinsic::vacopy: + case Intrinsic::returnaddress: + case Intrinsic::frameaddress: + case Intrinsic::isunordered: + case Intrinsic::ctpop: + case Intrinsic::ctlz: + case Intrinsic::cttz: + case Intrinsic::sqrt: + return true; // These intrinsics have no side effects. + } + return false; } // dceInstruction - Inspect the instruction at *BBI and figure out if it's |

