[llvm] r364778 - Fixup r364512

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 1 08:07:38 PDT 2019


Author: rovka
Date: Mon Jul  1 08:07:38 2019
New Revision: 364778

URL: http://llvm.org/viewvc/llvm-project?rev=364778&view=rev
Log:
Fixup r364512

Fix stack-use-after-scope errors from r364512. One instance was already
fixed in r364611 - this patch simplifies that fix and addresses one more
instance of similar code.

Discussed in: https://reviews.llvm.org/D63905

Modified:
    llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp

Modified: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=364778&r1=364777&r2=364778&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Mon Jul  1 08:07:38 2019
@@ -1566,16 +1566,16 @@ bool IRTranslator::translateCall(const U
     ArrayRef<Register> Res = getOrCreateVRegs(CI);
 
     SmallVector<ArrayRef<Register>, 8> Args;
-    SmallVector<Register, 8> InVRegs;
+    Register SwiftInVReg = 0;
     Register SwiftErrorVReg = 0;
     for (auto &Arg: CI.arg_operands()) {
       if (CLI->supportSwiftError() && isSwiftError(Arg)) {
+        assert(SwiftInVReg == 0 && "Expected only one swift error argument");
         LLT Ty = getLLTForType(*Arg->getType(), *DL);
-        InVRegs.push_back(MRI->createGenericVirtualRegister(Ty));
-        MIRBuilder.buildCopy(
-            InVRegs.back(),
-            SwiftError.getOrCreateVRegUseAt(&CI, &MIRBuilder.getMBB(), Arg));
-        Args.emplace_back(llvm::makeArrayRef(InVRegs.back()));
+        SwiftInVReg = MRI->createGenericVirtualRegister(Ty);
+        MIRBuilder.buildCopy(SwiftInVReg, SwiftError.getOrCreateVRegUseAt(
+                                              &CI, &MIRBuilder.getMBB(), Arg));
+        Args.emplace_back(makeArrayRef(SwiftInVReg));
         SwiftErrorVReg =
             SwiftError.getOrCreateVRegDefAt(&CI, &MIRBuilder.getMBB(), Arg);
         continue;
@@ -1669,13 +1669,15 @@ bool IRTranslator::translateInvoke(const
     Res = getOrCreateVRegs(I);
   SmallVector<ArrayRef<Register>, 8> Args;
   Register SwiftErrorVReg = 0;
+  Register SwiftInVReg = 0;
   for (auto &Arg : I.arg_operands()) {
     if (CLI->supportSwiftError() && isSwiftError(Arg)) {
+      assert(SwiftInVReg == 0 && "Expected only one swift error argument");
       LLT Ty = getLLTForType(*Arg->getType(), *DL);
-      Register InVReg = MRI->createGenericVirtualRegister(Ty);
-      MIRBuilder.buildCopy(InVReg, SwiftError.getOrCreateVRegUseAt(
-                                       &I, &MIRBuilder.getMBB(), Arg));
-      Args.push_back(InVReg);
+      SwiftInVReg = MRI->createGenericVirtualRegister(Ty);
+      MIRBuilder.buildCopy(SwiftInVReg, SwiftError.getOrCreateVRegUseAt(
+                                            &I, &MIRBuilder.getMBB(), Arg));
+      Args.push_back(makeArrayRef(SwiftInVReg));
       SwiftErrorVReg =
           SwiftError.getOrCreateVRegDefAt(&I, &MIRBuilder.getMBB(), Arg);
       continue;




More information about the llvm-commits mailing list