MIPS: Turn off allocation site info for crankshafted array constructor calls.
Port r14934 (dbddd7e) Original commit message: Once we crankshaft a method, we should turn off allocation site info for constructed arrays. Additionally, the semantics for doing this were awkward because the constructed array code stubs get an AllocationSiteMode as a minor key, but it's used as a permission to determine the final mode locally based on ElementsKind. I refactored this to a simpler boolean for override or local control. BUG= Review URL: https://codereview.chromium.org/16226020 Patch from Balazs Kilvady <kilvadyb@homejinni.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14943 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
74a06647cc
commit
70ce03c19d
@ -7659,6 +7659,10 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
||||
ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
||||
T stub(kind);
|
||||
stub.GetCode(isolate)->set_is_pregenerated(true);
|
||||
if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
|
||||
T stub1(kind, true);
|
||||
stub1.GetCode(isolate)->set_is_pregenerated(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3920,14 +3920,17 @@ void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
|
||||
__ li(a0, Operand(instr->arity()));
|
||||
__ li(a2, Operand(instr->hydrogen()->property_cell()));
|
||||
ElementsKind kind = instr->hydrogen()->elements_kind();
|
||||
bool disable_allocation_sites =
|
||||
(AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
|
||||
|
||||
if (instr->arity() == 0) {
|
||||
ArrayNoArgumentConstructorStub stub(kind);
|
||||
ArrayNoArgumentConstructorStub stub(kind, disable_allocation_sites);
|
||||
CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
|
||||
} else if (instr->arity() == 1) {
|
||||
ArraySingleArgumentConstructorStub stub(kind);
|
||||
ArraySingleArgumentConstructorStub stub(kind, disable_allocation_sites);
|
||||
CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
|
||||
} else {
|
||||
ArrayNArgumentsConstructorStub stub(kind);
|
||||
ArrayNArgumentsConstructorStub stub(kind, disable_allocation_sites);
|
||||
CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user