Don't reload the values that are already there. The llvm.eh.resume uses the same
authorBill Wendling <isanbard@gmail.com>
Sat, 3 Sep 2011 01:38:17 +0000 (01:38 +0000)
committerBill Wendling <isanbard@gmail.com>
Sat, 3 Sep 2011 01:38:17 +0000 (01:38 +0000)
values that the resume instruction uses.
PR10850

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139076 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/AutoUpgrade.cpp

index dc66ad7c47ce3d451b5f52588ae943737098c3b1..a7f5888ea5dc835090d9e3718a3df02253cbb63d 100644 (file)
@@ -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.'