summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorDiana Picus <diana.picus@linaro.org>2019-07-01 15:07:38 +0000
committerDiana Picus <diana.picus@linaro.org>2019-07-01 15:07:38 +0000
commit2ba16011c139ee12c1d4959e6c77702444a0b9cd (patch)
treeb004cd240519b7caf7f9cbe854804b6fbe2af677 /llvm/lib/CodeGen
parent28145735f7bddc365a61a2edc5e2df37c305a1dc (diff)
downloadbcm5719-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.cpp22
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;
OpenPOWER on IntegriCloud