Bug 998490 - OdinMonkey: rm unused functionCounts from asm.js (r=bbouvier)

--HG--
extra : rebase_source : c6b38f528625ca9bea4ce6f9de85d66e1d3374e0
This commit is contained in:
Luke Wagner 2014-04-16 16:06:08 -05:00
parent 8d5f4193c1
commit aadd9c9a70
6 changed files with 14 additions and 87 deletions

View File

@ -1445,10 +1445,6 @@ class MOZ_STACK_CLASS ModuleCompiler
}
#endif
bool addFunctionCounts(IonScriptCounts *counts) {
return module_->addFunctionCounts(counts);
}
void finishFunctionBodies() {
JS_ASSERT(!finishedFunctionBodies_);
masm_.align(AsmJSPageSize);
@ -5461,12 +5457,6 @@ GenerateCode(ModuleCompiler &m, ModuleCompiler::Func &func, MIRGenerator &mir, L
if (!codegen || !codegen->generateAsmJS(&m.stackOverflowLabel()))
return m.fail(nullptr, "internal codegen failure (probably out of memory)");
jit::IonScriptCounts *counts = codegen->extractUnassociatedScriptCounts();
if (counts && !m.addFunctionCounts(counts)) {
js_delete(counts);
return false;
}
#if defined(MOZ_VTUNE) || defined(JS_ION_PERF)
// Profiling might not be active now, but it may be activated later (perhaps
// after the module has been cached and reloaded from the cache). Function

View File

@ -371,9 +371,6 @@ AsmJSModule::~AsmJSModule()
DeallocateExecutableMemory(code_, pod.totalBytes_);
}
for (size_t i = 0; i < numFunctionCounts(); i++)
js_delete(functionCounts(i));
}
void
@ -392,7 +389,6 @@ AsmJSModule::addSizeOfMisc(mozilla::MallocSizeOf mallocSizeOf, size_t *asmJSModu
#if defined(JS_ION_PERF)
perfProfiledBlocksFunctions_.sizeOfExcludingThis(mallocSizeOf) +
#endif
functionCounts_.sizeOfExcludingThis(mallocSizeOf) +
staticLinkData_.sizeOfExcludingThis(mallocSizeOf);
}

View File

@ -458,8 +458,6 @@ class AsmJSModule
ScriptSource * scriptSource_;
FunctionCountsVector functionCounts_;
// This field is accessed concurrently when requesting an interrupt.
// Access must be synchronized via the runtime's interrupt lock.
mutable bool codeIsProtected_;
@ -596,9 +594,6 @@ class AsmJSModule
*exitIndex = unsigned(exits_.length());
return exits_.append(Exit(ffiIndex, globalDataOffset));
}
bool addFunctionCounts(jit::IonScriptCounts *counts) {
return functionCounts_.append(counts);
}
bool addExportedFunction(PropertyName *name, uint32_t line, uint32_t column,
uint32_t srcStart, uint32_t srcEnd,
@ -687,12 +682,6 @@ class AsmJSModule
JS_ASSERT(exit.ionCodeOffset_);
return code_ + exit.ionCodeOffset_;
}
unsigned numFunctionCounts() const {
return functionCounts_.length();
}
jit::IonScriptCounts *functionCounts(unsigned i) {
return functionCounts_[i];
}
// An Exit holds bookkeeping information about an exit; the ExitDatum
// struct overlays the actual runtime data stored in the global data

View File

@ -150,14 +150,12 @@ MNewStringObject::templateObj() const {
CodeGenerator::CodeGenerator(MIRGenerator *gen, LIRGraph *graph, MacroAssembler *masm)
: CodeGeneratorSpecific(gen, graph, masm)
, ionScriptLabels_(gen->alloc())
, unassociatedScriptCounts_(nullptr)
{
}
CodeGenerator::~CodeGenerator()
{
JS_ASSERT_IF(!gen->compilingAsmJS(), masm.numAsmJSAbsoluteLinks() == 0);
js_delete(unassociatedScriptCounts_);
}
typedef bool (*StringToNumberFn)(ThreadSafeContext *, JSString *, double *);
@ -2976,15 +2974,15 @@ CodeGenerator::maybeCreateScriptCounts()
if (!cx || !cx->runtime()->profilingScripts)
return nullptr;
IonScriptCounts *counts = nullptr;
CompileInfo *outerInfo = &gen->info();
JSScript *script = outerInfo->script();
if (script && !script->hasScriptCounts() && !script->initScriptCounts(cx))
if (!script)
return nullptr;
counts = js_new<IonScriptCounts>();
if (!script->hasScriptCounts() && !script->initScriptCounts(cx))
return nullptr;
IonScriptCounts *counts = js_new<IonScriptCounts>();
if (!counts || !counts->init(graph.numBlocks())) {
js_delete(counts);
return nullptr;
@ -2993,33 +2991,24 @@ CodeGenerator::maybeCreateScriptCounts()
for (size_t i = 0; i < graph.numBlocks(); i++) {
MBasicBlock *block = graph.getBlock(i)->mir();
uint32_t offset = 0;
if (script) {
// Find a PC offset in the outermost script to use. If this block
// is from an inlined script, find a location in the outer script
// to associate information about the inlining with.
MResumePoint *resume = block->entryResumePoint();
while (resume->caller())
resume = resume->caller();
offset = script->pcToOffset(resume->pc());
}
uint32_t offset = script->pcToOffset(resume->pc());
if (!counts->block(i).init(block->id(), offset, block->numSuccessors())) {
js_delete(counts);
return nullptr;
}
for (size_t j = 0; j < block->numSuccessors(); j++)
counts->block(i).setSuccessor(j, block->getSuccessor(j)->id());
}
if (script) {
script->addIonCounts(counts);
} else {
// Compiling code for Asm.js. Leave the counts on the CodeGenerator to
// be picked up by the AsmJSModule after generation finishes.
unassociatedScriptCounts_ = counts;
}
return counts;
}

View File

@ -349,12 +349,6 @@ class CodeGenerator : public CodeGeneratorSpecific
bool visitRecompileCheck(LRecompileCheck *ins);
IonScriptCounts *extractUnassociatedScriptCounts() {
IonScriptCounts *counts = unassociatedScriptCounts_;
unassociatedScriptCounts_ = nullptr; // prevent delete in dtor
return counts;
}
private:
bool addGetPropertyCache(LInstruction *ins, RegisterSet liveRegs, Register objReg,
PropertyName *name, TypedOrValueRegister output,
@ -455,9 +449,6 @@ class CodeGenerator : public CodeGeneratorSpecific
bool emitValueResultChecks(LInstruction *lir, MDefinition *mir);
#endif
// Script counts created when compiling code with no associated JSScript.
IonScriptCounts *unassociatedScriptCounts_;
#if defined(JS_ION_PERF)
PerfSpewer perfSpewer_;
#endif

View File

@ -843,34 +843,6 @@ JS_DumpCompartmentPCCounts(JSContext *cx)
if (script->hasScriptCounts())
JS_DumpPCCounts(cx, script);
}
#if defined(JS_ION)
for (unsigned thingKind = FINALIZE_OBJECT0; thingKind < FINALIZE_OBJECT_LIMIT; thingKind++) {
for (CellIter i(cx->zone(), (AllocKind) thingKind); !i.done(); i.next()) {
JSObject *obj = i.get<JSObject>();
if (obj->compartment() != cx->compartment())
continue;
if (obj->is<AsmJSModuleObject>()) {
AsmJSModule &module = obj->as<AsmJSModuleObject>().module();
Sprinter sprinter(cx);
if (!sprinter.init())
return;
fprintf(stdout, "--- Asm.js Module ---\n");
for (size_t i = 0; i < module.numFunctionCounts(); i++) {
jit::IonScriptCounts *counts = module.functionCounts(i);
DumpIonScriptCounts(&sprinter, counts);
}
fputs(sprinter.string(), stdout);
fprintf(stdout, "--- END Asm.js Module ---\n");
}
}
}
#endif
}
JS_FRIEND_API(bool)