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:
Lars T Hansen 2017-06-02 14:05:08 +02:00
Родитель cbbb31b770
Коммит 0596a245bd
6 изменённых файлов: 24 добавлений и 32 удалений

Просмотреть файл

@ -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: