From ec710c5b12af647ae90f53917122726269c18738 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 6 May 2005 05:27:34 +0000 Subject: DCE intrinsic instructions without side effects. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21719 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/Local.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'lib/Transforms/Utils/Local.cpp') diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index 4d141533b8..0ed669643e 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/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(I); + if (!I->use_empty() || isa(I)) return false; + + if (!I->mayWriteToMemory()) return true; + + if (CallInst *CI = dyn_cast(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 -- cgit v1.2.3