From 8b0ea313d9cdbb43154b52a004ea4a1dfa43a0b5 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 13 Jan 2006 20:11:04 +0000 Subject: [PATCH] Simplify this a tiny bit by using the new IntrinsicInst functionality. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25292 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Scalar/InstructionCombining.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 1f59f4c45bb..b326220499d 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -4620,12 +4620,17 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) { } -// CallInst simplification -// +/// visitCallInst - CallInst simplification. This mostly only handles folding +/// of intrinsic instructions. For normal calls, it allows visitCallSite to do +/// the heavy lifting. +/// Instruction *InstCombiner::visitCallInst(CallInst &CI) { + IntrinsicInst *II = dyn_cast(&CI); + if (!II) return visitCallSite(&CI); + // Intrinsics cannot occur in an invoke, so handle them here instead of in // visitCallSite. - if (MemIntrinsic *MI = dyn_cast(&CI)) { + if (MemIntrinsic *MI = dyn_cast(II)) { bool Changed = false; // memmove/cpy/set of zero bytes is a noop. @@ -4645,7 +4650,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { // If we have a memmove and the source operation is a constant global, // then the source and dest pointers can't alias, so we can change this // into a call to memcpy. - if (MemMoveInst *MMI = dyn_cast(MI)) + if (MemMoveInst *MMI = dyn_cast(II)) if (GlobalVariable *GVSrc = dyn_cast(MMI->getSource())) if (GVSrc->isConstant()) { Module *M = CI.getParent()->getParent()->getParent(); @@ -4655,8 +4660,8 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { Changed = true; } - if (Changed) return &CI; - } else if (DbgStopPointInst *SPI = dyn_cast(&CI)) { + if (Changed) return II; + } else if (DbgStopPointInst *SPI = dyn_cast(II)) { // If this stoppoint is at the same source location as the previous // stoppoint in the chain, it is not needed. if (DbgStopPointInst *PrevSPI = @@ -4668,7 +4673,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { } } - return visitCallSite(&CI); + return visitCallSite(II); } // InvokeInst simplification