From: Diana Picus Date: Mon, 1 Jul 2019 15:07:38 +0000 (+0000) Subject: Fixup r364512 X-Git-Tag: android-x86-9.0-r1~1060 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bf7ca47fd2c835a8b6a5475fb63396ed3f68cadd;p=android-x86%2Fexternal-llvm.git 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364778 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/GlobalISel/IRTranslator.cpp b/lib/CodeGen/GlobalISel/IRTranslator.cpp index dd0194bcc60..443ca730d55 100644 --- a/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1566,16 +1566,16 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) { ArrayRef Res = getOrCreateVRegs(CI); SmallVector, 8> Args; - SmallVector 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 User &U, Res = getOrCreateVRegs(I); SmallVector, 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;