diff options
| author | Diana Picus <diana.picus@linaro.org> | 2019-07-01 15:07:38 +0000 |
|---|---|---|
| committer | Diana Picus <diana.picus@linaro.org> | 2019-07-01 15:07:38 +0000 |
| commit | 2ba16011c139ee12c1d4959e6c77702444a0b9cd (patch) | |
| tree | b004cd240519b7caf7f9cbe854804b6fbe2af677 /llvm/lib/CodeGen | |
| parent | 28145735f7bddc365a61a2edc5e2df37c305a1dc (diff) | |
| download | bcm5719-llvm-2ba16011c139ee12c1d4959e6c77702444a0b9cd.tar.gz bcm5719-llvm-2ba16011c139ee12c1d4959e6c77702444a0b9cd.zip | |
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
llvm-svn: 364778
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index dd0194bcc60..443ca730d55 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1566,16 +1566,16 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) { 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 User &U, 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; |

