diff options
author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-03-10 00:25:35 +0000 |
---|---|---|
committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-03-10 00:25:35 +0000 |
commit | 4ec6d5abed9ecb760a53a97ce0468378ec0a8ce2 (patch) | |
tree | c4bd689043ff8c2bb34c53fbcea424fe60448b2d /llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | |
parent | 04d9e746f1792ecf610d823eb486332e1ab8030b (diff) | |
download | bcm5719-llvm-4ec6d5abed9ecb760a53a97ce0468378ec0a8ce2.tar.gz bcm5719-llvm-4ec6d5abed9ecb760a53a97ce0468378ec0a8ce2.zip |
[GlobalISel] Fallback when failing to translate invoke.
We unintentionally stopped falling back in r293670.
While there, change an unusual construct.
llvm-svn: 297425
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index b2ab3c12bc1..1e8f6c222d7 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -787,7 +787,7 @@ bool IRTranslator::translateInvoke(const User &U, const BasicBlock *ReturnBB = I.getSuccessor(0); const BasicBlock *EHPadBB = I.getSuccessor(1); - const Value *Callee(I.getCalledValue()); + const Value *Callee = I.getCalledValue(); const Function *Fn = dyn_cast<Function>(Callee); if (isa<InlineAsm>(Callee)) return false; @@ -815,8 +815,9 @@ bool IRTranslator::translateInvoke(const User &U, for (auto &Arg: I.arg_operands()) Args.push_back(getOrCreateVReg(*Arg)); - CLI->lowerCall(MIRBuilder, I, Res, Args, - [&]() { return getOrCreateVReg(*I.getCalledValue()); }); + if (!CLI->lowerCall(MIRBuilder, I, Res, Args, + [&]() { return getOrCreateVReg(*I.getCalledValue()); })) + return false; MCSymbol *EndSymbol = Context.createTempSymbol(); MIRBuilder.buildInstr(TargetOpcode::EH_LABEL).addSym(EndSymbol); |