Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: src/compiler/arm64/code-generator-arm64.cc

Issue 1928903002: [turbofan] Abort compilation when the max deoptimization table size is exceeded. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Uhm, re-enable verifier Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/arm/code-generator-arm.cc ('k') | src/compiler/code-generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/arm64/macro-assembler-arm64.h" 8 #include "src/arm64/macro-assembler-arm64.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/compiler/code-generator-impl.h" 10 #include "src/compiler/code-generator-impl.h"
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset)); 530 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset));
531 __ SmiUntag(caller_args_count_reg); 531 __ SmiUntag(caller_args_count_reg);
532 532
533 ParameterCount callee_args_count(args_reg); 533 ParameterCount callee_args_count(args_reg);
534 __ PrepareForTailCall(callee_args_count, caller_args_count_reg, scratch2, 534 __ PrepareForTailCall(callee_args_count, caller_args_count_reg, scratch2,
535 scratch3); 535 scratch3);
536 __ bind(&done); 536 __ bind(&done);
537 } 537 }
538 538
539 // Assembles an instruction after register allocation, producing machine code. 539 // Assembles an instruction after register allocation, producing machine code.
540 void CodeGenerator::AssembleArchInstruction(Instruction* instr) { 540 CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
541 Instruction* instr) {
541 Arm64OperandConverter i(this, instr); 542 Arm64OperandConverter i(this, instr);
542 InstructionCode opcode = instr->opcode(); 543 InstructionCode opcode = instr->opcode();
543 ArchOpcode arch_opcode = ArchOpcodeField::decode(opcode); 544 ArchOpcode arch_opcode = ArchOpcodeField::decode(opcode);
544 switch (arch_opcode) { 545 switch (arch_opcode) {
545 case kArchCallCodeObject: { 546 case kArchCallCodeObject: {
546 EnsureSpaceForLazyDeopt(); 547 EnsureSpaceForLazyDeopt();
547 if (instr->InputAt(0)->IsImmediate()) { 548 if (instr->InputAt(0)->IsImmediate()) {
548 __ Call(Handle<Code>::cast(i.InputHeapObject(0)), 549 __ Call(Handle<Code>::cast(i.InputHeapObject(0)),
549 RelocInfo::CODE_TARGET); 550 RelocInfo::CODE_TARGET);
550 } else { 551 } else {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 break; 683 break;
683 case kArchNop: 684 case kArchNop:
684 case kArchThrowTerminator: 685 case kArchThrowTerminator:
685 // don't emit code for nops. 686 // don't emit code for nops.
686 break; 687 break;
687 case kArchDeoptimize: { 688 case kArchDeoptimize: {
688 int deopt_state_id = 689 int deopt_state_id =
689 BuildTranslation(instr, -1, 0, OutputFrameStateCombine::Ignore()); 690 BuildTranslation(instr, -1, 0, OutputFrameStateCombine::Ignore());
690 Deoptimizer::BailoutType bailout_type = 691 Deoptimizer::BailoutType bailout_type =
691 Deoptimizer::BailoutType(MiscField::decode(instr->opcode())); 692 Deoptimizer::BailoutType(MiscField::decode(instr->opcode()));
692 AssembleDeoptimizerCall(deopt_state_id, bailout_type); 693 CodeGenResult result =
694 AssembleDeoptimizerCall(deopt_state_id, bailout_type);
695 if (result != kSuccess) return result;
693 break; 696 break;
694 } 697 }
695 case kArchRet: 698 case kArchRet:
696 AssembleReturn(); 699 AssembleReturn();
697 break; 700 break;
698 case kArchStackPointer: 701 case kArchStackPointer:
699 __ mov(i.OutputRegister(), masm()->StackPointer()); 702 __ mov(i.OutputRegister(), masm()->StackPointer());
700 break; 703 break;
701 case kArchFramePointer: 704 case kArchFramePointer:
702 __ mov(i.OutputRegister(), fp); 705 __ mov(i.OutputRegister(), fp);
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
1422 break; 1425 break;
1423 case kAtomicLoadUint16: 1426 case kAtomicLoadUint16:
1424 ASSEMBLE_ATOMIC_LOAD_INTEGER(Ldrh); 1427 ASSEMBLE_ATOMIC_LOAD_INTEGER(Ldrh);
1425 break; 1428 break;
1426 case kAtomicLoadWord32: 1429 case kAtomicLoadWord32:
1427 __ Ldr(i.OutputRegister32(), 1430 __ Ldr(i.OutputRegister32(),
1428 MemOperand(i.InputRegister(0), i.InputRegister(1))); 1431 MemOperand(i.InputRegister(0), i.InputRegister(1)));
1429 __ Dmb(InnerShareable, BarrierAll); 1432 __ Dmb(InnerShareable, BarrierAll);
1430 break; 1433 break;
1431 } 1434 }
1435 return kSuccess;
1432 } // NOLINT(readability/fn_size) 1436 } // NOLINT(readability/fn_size)
1433 1437
1434 1438
1435 // Assemble branches after this instruction. 1439 // Assemble branches after this instruction.
1436 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { 1440 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
1437 Arm64OperandConverter i(this, instr); 1441 Arm64OperandConverter i(this, instr);
1438 Label* tlabel = branch->true_label; 1442 Label* tlabel = branch->true_label;
1439 Label* flabel = branch->false_label; 1443 Label* flabel = branch->false_label;
1440 FlagsCondition condition = branch->condition; 1444 FlagsCondition condition = branch->condition;
1441 ArchOpcode opcode = instr->arch_opcode(); 1445 ArchOpcode opcode = instr->arch_opcode();
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 __ Add(temp, temp, Operand(input, UXTW, 2)); 1528 __ Add(temp, temp, Operand(input, UXTW, 2));
1525 __ Br(temp); 1529 __ Br(temp);
1526 __ StartBlockPools(); 1530 __ StartBlockPools();
1527 __ Bind(&table); 1531 __ Bind(&table);
1528 for (size_t index = 0; index < case_count; ++index) { 1532 for (size_t index = 0; index < case_count; ++index) {
1529 __ B(GetLabel(i.InputRpo(index + 2))); 1533 __ B(GetLabel(i.InputRpo(index + 2)));
1530 } 1534 }
1531 __ EndBlockPools(); 1535 __ EndBlockPools();
1532 } 1536 }
1533 1537
1534 1538 CodeGenerator::CodeGenResult CodeGenerator::AssembleDeoptimizerCall(
1535 void CodeGenerator::AssembleDeoptimizerCall(
1536 int deoptimization_id, Deoptimizer::BailoutType bailout_type) { 1539 int deoptimization_id, Deoptimizer::BailoutType bailout_type) {
1537 Address deopt_entry = Deoptimizer::GetDeoptimizationEntry( 1540 Address deopt_entry = Deoptimizer::GetDeoptimizationEntry(
1538 isolate(), deoptimization_id, bailout_type); 1541 isolate(), deoptimization_id, bailout_type);
1542 if (deopt_entry == nullptr) return kTooManyDeoptimizationBailouts;
1539 __ Call(deopt_entry, RelocInfo::RUNTIME_ENTRY); 1543 __ Call(deopt_entry, RelocInfo::RUNTIME_ENTRY);
1544 return kSuccess;
1540 } 1545 }
1541 1546
1542 void CodeGenerator::FinishFrame(Frame* frame) { 1547 void CodeGenerator::FinishFrame(Frame* frame) {
1543 frame->AlignFrame(16); 1548 frame->AlignFrame(16);
1544 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); 1549 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor();
1545 1550
1546 if (descriptor->UseNativeStack() || descriptor->IsCFunctionCall()) { 1551 if (descriptor->UseNativeStack() || descriptor->IsCFunctionCall()) {
1547 __ SetStackPointer(csp); 1552 __ SetStackPointer(csp);
1548 } else { 1553 } else {
1549 __ SetStackPointer(jssp); 1554 __ SetStackPointer(jssp);
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 padding_size -= kInstructionSize; 1860 padding_size -= kInstructionSize;
1856 } 1861 }
1857 } 1862 }
1858 } 1863 }
1859 1864
1860 #undef __ 1865 #undef __
1861 1866
1862 } // namespace compiler 1867 } // namespace compiler
1863 } // namespace internal 1868 } // namespace internal
1864 } // namespace v8 1869 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/arm/code-generator-arm.cc ('k') | src/compiler/code-generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698