summaryrefslogtreecommitdiff
path: root/lib/VMCore
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-09-03 01:38:17 +0000
committerBill Wendling <isanbard@gmail.com>2011-09-03 01:38:17 +0000
commit17fe6c48ffd966433496d0cd4b62215c9dc60982 (patch)
tree411056cb9c18b320db6125b77f135b676aa797a1 /lib/VMCore
parent5a76f00108a3413cff7aebd30efba02ba965b388 (diff)
downloadllvm-17fe6c48ffd966433496d0cd4b62215c9dc60982.tar.gz
llvm-17fe6c48ffd966433496d0cd4b62215c9dc60982.tar.bz2
llvm-17fe6c48ffd966433496d0cd4b62215c9dc60982.tar.xz
Don't reload the values that are already there. The llvm.eh.resume uses the same
values that the resume instruction uses. PR10850 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139076 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r--lib/VMCore/AutoUpgrade.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/VMCore/AutoUpgrade.cpp b/lib/VMCore/AutoUpgrade.cpp
index dc66ad7c47..a7f5888ea5 100644
--- a/lib/VMCore/AutoUpgrade.cpp
+++ b/lib/VMCore/AutoUpgrade.cpp
@@ -510,18 +510,15 @@ void llvm::UpgradeExceptionHandling(Module *M) {
while (!EHResume->use_empty()) {
CallInst *Resume = cast<CallInst>(EHResume->use_back());
BasicBlock *BB = Resume->getParent();
- Function *Fn = BB->getParent();
- std::pair<Value*, Value*> &ExnSel = FnToLPadSlotMap[Fn];
+
IRBuilder<> Builder(Context);
Builder.SetInsertPoint(BB, Resume);
- Value *Exn = Builder.CreateLoad(ExnSel.first, "exn");
- Value *Sel = Builder.CreateLoad(ExnSel.second, "sel");
-
Value *LPadVal =
Builder.CreateInsertValue(UndefValue::get(LPadSlotTy),
- Exn, 0, "lpad.val");
- LPadVal = Builder.CreateInsertValue(LPadVal, Sel, 1, "lpad.val");
+ Resume->getArgOperand(0), 0, "lpad.val");
+ LPadVal = Builder.CreateInsertValue(LPadVal, Resume->getArgOperand(1),
+ 1, "lpad.val");
Builder.CreateResume(LPadVal);
// Remove all instructions after the 'resume.'