diff options
| author | Chris Lattner <sabre@nondot.org> | 2003-10-30 00:46:41 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2003-10-30 00:46:41 +0000 |
| commit | bb60904469b11e8834a852f095a7a9af3f4ccac1 (patch) | |
| tree | 38e7442e85670ad1fa84eb175b945a87b70d0c8c /lib/Transforms | |
| parent | 1758d4d8635b9581ce872cad392af25e87b1a925 (diff) | |
| download | external_llvm-bb60904469b11e8834a852f095a7a9af3f4ccac1.zip external_llvm-bb60904469b11e8834a852f095a7a9af3f4ccac1.tar.gz external_llvm-bb60904469b11e8834a852f095a7a9af3f4ccac1.tar.bz2 | |
Fix bug: 2003-10-29-CallSiteResolve.ll & PR70
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9600 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 91c549d..bc1a819 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/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<InvokeInst>(Caller)) { + BasicBlock::iterator I = II->getNormalDest()->begin(); + while (isa<PHINode>(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()); |
