Commit 3c9c7748 authored by bmeurer's avatar bmeurer Committed by Commit bot

[arm] CheckConstPool between TurboFan instructions.

Some TurboFan instructions block the literal pool for their entire
duration. If a long enough sequence of these instructions is
encountered, the literal pool can be blocked until it goes out of range.

Patch from issue 1236603002 at patchset 1 (http://crrev.com/1236603002#ps1).

BUG=v8:4292
LOG=y
R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1232343002

Cr-Commit-Position: refs/heads/master@{#29587}
parent ad7f35c4
...@@ -433,9 +433,7 @@ void Assembler::CheckBuffer() { ...@@ -433,9 +433,7 @@ void Assembler::CheckBuffer() {
if (buffer_space() <= kGap) { if (buffer_space() <= kGap) {
GrowBuffer(); GrowBuffer();
} }
if (pc_offset() >= next_buffer_check_) { MaybeCheckConstPool();
CheckConstPool(false, true);
}
} }
......
...@@ -1492,6 +1492,12 @@ class Assembler : public AssemblerBase { ...@@ -1492,6 +1492,12 @@ class Assembler : public AssemblerBase {
// Check if is time to emit a constant pool. // Check if is time to emit a constant pool.
void CheckConstPool(bool force_emit, bool require_jump); void CheckConstPool(bool force_emit, bool require_jump);
void MaybeCheckConstPool() {
if (pc_offset() >= next_buffer_check_) {
CheckConstPool(false, true);
}
}
int EmitEmbeddedConstantPool() { int EmitEmbeddedConstantPool() {
DCHECK(FLAG_enable_embedded_constant_pool); DCHECK(FLAG_enable_embedded_constant_pool);
return constant_pool_builder_.Emit(this); return constant_pool_builder_.Emit(this);
......
...@@ -312,6 +312,8 @@ void CodeGenerator::AssembleDeconstructActivationRecord() { ...@@ -312,6 +312,8 @@ void CodeGenerator::AssembleDeconstructActivationRecord() {
void CodeGenerator::AssembleArchInstruction(Instruction* instr) { void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
ArmOperandConverter i(this, instr); ArmOperandConverter i(this, instr);
masm()->MaybeCheckConstPool();
switch (ArchOpcodeField::decode(instr->opcode())) { switch (ArchOpcodeField::decode(instr->opcode())) {
case kArchCallCodeObject: { case kArchCallCodeObject: {
EnsureSpaceForLazyDeopt(); EnsureSpaceForLazyDeopt();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment