Index: src/compiler/s390/code-generator-s390.cc |
diff --git a/src/compiler/s390/code-generator-s390.cc b/src/compiler/s390/code-generator-s390.cc |
index de6341cd6f824885c2bc17244e08a13c24bb9457..d39059daff121fa06e68cf260e6b41628c53ca3b 100644 |
--- a/src/compiler/s390/code-generator-s390.cc |
+++ b/src/compiler/s390/code-generator-s390.cc |
@@ -593,7 +593,8 @@ void CodeGenerator::AssemblePopArgumentsAdaptorFrame(Register args_reg, |
} |
// Assembles an instruction after register allocation, producing machine code. |
-void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
+CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
+ Instruction* instr) { |
S390OperandConverter i(this, instr); |
ArchOpcode opcode = ArchOpcodeField::decode(instr->opcode()); |
@@ -722,7 +723,9 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
BuildTranslation(instr, -1, 0, OutputFrameStateCombine::Ignore()); |
Deoptimizer::BailoutType bailout_type = |
Deoptimizer::BailoutType(MiscField::decode(instr->opcode())); |
- AssembleDeoptimizerCall(deopt_state_id, bailout_type); |
+ CodeGenResult result = |
+ AssembleDeoptimizerCall(deopt_state_id, bailout_type); |
+ if (result != kSuccess) return result; |
break; |
} |
case kArchRet: |
@@ -1661,6 +1664,7 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
UNREACHABLE(); |
break; |
} |
+ return kSuccess; |
} // NOLINT(readability/fn_size) |
// Assembles branches after an instruction. |
@@ -1780,14 +1784,16 @@ void CodeGenerator::AssembleArchTableSwitch(Instruction* instr) { |
__ Jump(kScratchReg); |
} |
-void CodeGenerator::AssembleDeoptimizerCall( |
+CodeGenerator::CodeGenResult CodeGenerator::AssembleDeoptimizerCall( |
int deoptimization_id, Deoptimizer::BailoutType bailout_type) { |
Address deopt_entry = Deoptimizer::GetDeoptimizationEntry( |
isolate(), deoptimization_id, bailout_type); |
// TODO(turbofan): We should be able to generate better code by sharing the |
// actual final call site and just bl'ing to it here, similar to what we do |
// in the lithium backend. |
+ if (deopt_entry == nullptr) return kTooManyDeoptimizationBailouts; |
__ Call(deopt_entry, RelocInfo::RUNTIME_ENTRY); |
+ return kSuccess; |
} |
void CodeGenerator::FinishFrame(Frame* frame) { |