зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1277562 - Part 12: Get rid of Tier::TBD. r=luke
--HG-- extra : rebase_source : 7f9b33af91e874e8868cb9cb28475dca601bf4e0 extra : intermediate-source : 83bb4f9bda591f62a798979e67aff0a099de4d99 extra : source : 71377c4e714e0991f5d6ac7630f142b5fb6f1fe4
This commit is contained in:
Родитель
cbbb31b770
Коммит
0596a245bd
|
@ -531,8 +531,6 @@ Metadata::metadata(Tier t) const
|
|||
if (hasTier2())
|
||||
return *metadata2_;
|
||||
MOZ_CRASH("No metadata at this tier");
|
||||
case Tier::TBD:
|
||||
return *metadata1_;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
@ -552,8 +550,6 @@ Metadata::metadata(Tier t)
|
|||
if (hasTier2())
|
||||
return *metadata2_;
|
||||
MOZ_CRASH("No metadata at this tier");
|
||||
case Tier::TBD:
|
||||
return *metadata1_;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
@ -715,6 +711,14 @@ Code::stableTier() const
|
|||
return segment1_->tier();
|
||||
}
|
||||
|
||||
Tier
|
||||
Code::bestTier() const
|
||||
{
|
||||
if (hasTier2())
|
||||
return segment2_->tier();
|
||||
return segment1_->tier();
|
||||
}
|
||||
|
||||
const CodeSegment&
|
||||
Code::segment(Tier tier) const
|
||||
{
|
||||
|
@ -729,8 +733,6 @@ Code::segment(Tier tier) const
|
|||
if (hasTier2())
|
||||
return *segment2_;
|
||||
MOZ_CRASH("No code segment at this tier");
|
||||
case Tier::TBD:
|
||||
return *segment1_;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
|
|
@ -466,7 +466,8 @@ class Code : public ShareableBase<Code>
|
|||
Tiers tiers() const;
|
||||
bool hasTier(Tier t) const;
|
||||
|
||||
Tier stableTier() const;
|
||||
Tier stableTier() const; // This is stable during a run
|
||||
Tier bestTier() const; // This may transition from Baseline -> Ion at any time
|
||||
|
||||
const CodeSegment& segment(Tier tier) const;
|
||||
const MetadataTier& metadata(Tier tier) const { return metadata_->metadata(tier); }
|
||||
|
|
|
@ -127,7 +127,7 @@ bool
|
|||
Instance::callImport(JSContext* cx, uint32_t funcImportIndex, unsigned argc, const uint64_t* argv,
|
||||
MutableHandleValue rval)
|
||||
{
|
||||
Tier tier = Tier::TBD;
|
||||
Tier tier = code().bestTier();
|
||||
|
||||
const FuncImport& fi = metadata(tier).funcImports[funcImportIndex];
|
||||
|
||||
|
@ -350,8 +350,7 @@ Instance::Instance(JSContext* cx,
|
|||
tlsData()->instance = this;
|
||||
tlsData()->addressOfContext = (JSContext**)object->zone()->group()->addressOfOwnerContext();
|
||||
|
||||
Tier callerTier = Tier::TBD;
|
||||
Tier calleeTier = Tier::TBD;
|
||||
Tier callerTier = code_->bestTier();
|
||||
|
||||
for (size_t i = 0; i < metadata(callerTier).funcImports.length(); i++) {
|
||||
HandleFunction f = funcImports[i];
|
||||
|
@ -359,8 +358,9 @@ Instance::Instance(JSContext* cx,
|
|||
FuncImportTls& import = funcImportTls(fi);
|
||||
if (!isAsmJS() && IsExportedWasmFunction(f)) {
|
||||
WasmInstanceObject* calleeInstanceObj = ExportedFunctionToInstanceObject(f);
|
||||
const CodeRange& codeRange = calleeInstanceObj->getExportedFunctionCodeRange(f, calleeTier);
|
||||
Instance& calleeInstance = calleeInstanceObj->instance();
|
||||
Tier calleeTier = calleeInstance.code().bestTier();
|
||||
const CodeRange& codeRange = calleeInstanceObj->getExportedFunctionCodeRange(f, calleeTier);
|
||||
import.tls = calleeInstance.tlsData();
|
||||
import.code = calleeInstance.codeBase(calleeTier) + codeRange.funcNormalEntry();
|
||||
import.baselineScript = nullptr;
|
||||
|
@ -503,6 +503,8 @@ Instance::tracePrivate(JSTracer* trc)
|
|||
MOZ_ASSERT(!gc::IsAboutToBeFinalized(&object_));
|
||||
TraceEdge(trc, &object_, "wasm instance object");
|
||||
|
||||
// OK to just do one tier here; though the tiers have different funcImports
|
||||
// tables, they share the tls object.
|
||||
for (const FuncImport& fi : metadata(code().stableTier()).funcImports)
|
||||
TraceNullableEdge(trc, &funcImportTls(fi).obj, "wasm import");
|
||||
|
||||
|
@ -561,7 +563,7 @@ Instance::callExport(JSContext* cx, uint32_t funcIndex, CallArgs args)
|
|||
// If there has been a moving grow, this Instance should have been notified.
|
||||
MOZ_RELEASE_ASSERT(!memory_ || tlsData()->memoryBase == memory_->buffer().dataPointerEither());
|
||||
|
||||
Tier tier = Tier::TBD;
|
||||
Tier tier = code().bestTier();
|
||||
|
||||
const FuncExport& func = metadata(tier).lookupFuncExport(funcIndex);
|
||||
|
||||
|
@ -820,9 +822,10 @@ Instance::onMovingGrowTable()
|
|||
void
|
||||
Instance::deoptimizeImportExit(uint32_t funcImportIndex)
|
||||
{
|
||||
const FuncImport& fi = metadata(code().stableTier()).funcImports[funcImportIndex];
|
||||
Tier t = code().bestTier();
|
||||
const FuncImport& fi = metadata(t).funcImports[funcImportIndex];
|
||||
FuncImportTls& import = funcImportTls(fi);
|
||||
import.code = codeBase(Tier::TBD) + fi.interpExitCodeOffset();
|
||||
import.code = codeBase(t) + fi.interpExitCodeOffset();
|
||||
import.baselineScript = nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -1772,7 +1772,6 @@ WasmTableObject::setImpl(JSContext* cx, const CallArgs& args)
|
|||
if (value) {
|
||||
RootedWasmInstanceObject instanceObj(cx, ExportedFunctionToInstanceObject(value));
|
||||
uint32_t funcIndex = ExportedFunctionToFuncIndex(value);
|
||||
Tier tier = Tier::TBD; // Perhaps the tier that the function is at?
|
||||
|
||||
#ifdef DEBUG
|
||||
RootedFunction f(cx);
|
||||
|
@ -1781,6 +1780,7 @@ WasmTableObject::setImpl(JSContext* cx, const CallArgs& args)
|
|||
#endif
|
||||
|
||||
Instance& instance = instanceObj->instance();
|
||||
Tier tier = instance.code().bestTier();
|
||||
const FuncExport& funcExport = instance.metadata(tier).lookupFuncExport(funcIndex);
|
||||
const CodeRange& codeRange = instance.metadata(tier).codeRanges[funcExport.codeRangeIndex()];
|
||||
void* code = instance.codeBase(tier) + codeRange.funcTableEntry();
|
||||
|
|
|
@ -168,8 +168,6 @@ LinkData::linkData(Tier tier) const
|
|||
if (hasTier2())
|
||||
return *linkData2_;
|
||||
MOZ_CRASH("No linkData at this tier");
|
||||
case Tier::TBD:
|
||||
return *linkData1_;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
@ -189,8 +187,6 @@ LinkData::linkData(Tier tier)
|
|||
if (hasTier2())
|
||||
return *linkData2_;
|
||||
MOZ_CRASH("No linkData at this tier");
|
||||
case Tier::TBD:
|
||||
return *linkData1_;
|
||||
default:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
@ -630,7 +626,7 @@ Module::initSegments(JSContext* cx,
|
|||
Instance& instance = instanceObj->instance();
|
||||
const SharedTableVector& tables = instance.tables();
|
||||
|
||||
Tier tier = Tier::TBD;
|
||||
Tier tier = code().bestTier();
|
||||
|
||||
// Perform all error checks up front so that this function does not perform
|
||||
// partial initialization if an error is reported.
|
||||
|
@ -680,9 +676,9 @@ Module::initSegments(JSContext* cx,
|
|||
|
||||
HandleFunction f = funcImports[funcIndex];
|
||||
WasmInstanceObject* exportInstanceObj = ExportedFunctionToInstanceObject(f);
|
||||
Tier exportTier = Tier::TBD;
|
||||
const CodeRange& cr = exportInstanceObj->getExportedFunctionCodeRange(f, exportTier);
|
||||
Instance& exportInstance = exportInstanceObj->instance();
|
||||
Tier exportTier = exportInstance.code().bestTier();
|
||||
const CodeRange& cr = exportInstanceObj->getExportedFunctionCodeRange(f, exportTier);
|
||||
table.set(offset + i, exportInstance.codeBase(exportTier) + cr.funcTableEntry(), exportInstance);
|
||||
} else {
|
||||
const CodeRange& cr = codeRanges[seg.elemCodeRangeIndices(tier)[i]];
|
||||
|
|
|
@ -360,8 +360,6 @@ enum class Tier
|
|||
Debug = Baseline,
|
||||
Ion,
|
||||
Serialized = Ion,
|
||||
|
||||
TBD // A placeholder while tiering is being implemented};
|
||||
};
|
||||
|
||||
// The CompileMode controls how compilation of a module is performed (notably,
|
||||
|
@ -757,10 +755,6 @@ struct ElemSegment
|
|||
|
||||
Uint32Vector& elemCodeRangeIndices(Tier t) {
|
||||
switch (t) {
|
||||
case Tier::TBD:
|
||||
if (elemCodeRangeIndices1_.length() > 0)
|
||||
return elemCodeRangeIndices1_;
|
||||
return elemCodeRangeIndices2_;
|
||||
case Tier::Baseline:
|
||||
return elemCodeRangeIndices1_;
|
||||
case Tier::Ion:
|
||||
|
@ -772,10 +766,6 @@ struct ElemSegment
|
|||
|
||||
const Uint32Vector& elemCodeRangeIndices(Tier t) const {
|
||||
switch (t) {
|
||||
case Tier::TBD:
|
||||
if (elemCodeRangeIndices1_.length() > 0)
|
||||
return elemCodeRangeIndices1_;
|
||||
return elemCodeRangeIndices2_;
|
||||
case Tier::Baseline:
|
||||
return elemCodeRangeIndices1_;
|
||||
case Tier::Ion:
|
||||
|
|
Загрузка…
Ссылка в новой задаче