From 686767f3f6d5bf0ca1ac79e524115a4960144a98 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 30 Oct 2003 00:46:41 +0000 Subject: Fix bug: 2003-10-29-CallSiteResolve.ll & PR70 llvm-svn: 9600 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Transforms/Scalar/InstructionCombining.cpp') diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 91c549d495e..bc1a81967f4 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -1739,7 +1739,17 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) { if (Caller->getType() != NV->getType() && !Caller->use_empty()) { if (NV->getType() != Type::VoidTy) { NV = NC = new CastInst(NC, Caller->getType(), "tmp"); - InsertNewInstBefore(NC, *Caller); + + // If this is an invoke instruction, we should insert it after the first + // non-phi, instruction in the normal successor block. + if (InvokeInst *II = dyn_cast(Caller)) { + BasicBlock::iterator I = II->getNormalDest()->begin(); + while (isa(I)) ++I; + InsertNewInstBefore(NC, *I); + } else { + // Otherwise, it's a call, just insert cast right after the call instr + InsertNewInstBefore(NC, *Caller); + } AddUsesToWorkList(*Caller); } else { NV = Constant::getNullValue(Caller->getType()); -- cgit v1.2.3