Bug 1248503 - Improve log output for MSimdBox and MSimdUnbox. r=nbp

Add a function SimdTypeToString used for logging purposes only.

Include the exact SimdType and initial heap when logging MSimdBox and
MSimdUnbox instructions.

MozReview-Commit-ID: 1WbwaQgMLqm

--HG--
extra : rebase_source : b72d256b0623c662db460481ecea8786f818aed4
This commit is contained in:
Jakob Stoklund Olesen 2016-02-17 10:17:49 -08:00
parent 674904d269
commit 354968df44
4 changed files with 32 additions and 0 deletions

View File

@ -95,6 +95,18 @@ js::IsVectorObject(HandleValue v)
FOR_EACH_SIMD(InstantiateIsVectorObject_)
#undef InstantiateIsVectorObject_
const char*
js::SimdTypeToString(SimdType type)
{
switch (type) {
#define RETSTR_(TYPE) case SimdType::TYPE: return #TYPE;
FOR_EACH_SIMD(RETSTR_)
#undef RETSTR_
case SimdType::Count: break;
}
return "<bad SimdType>";
}
static inline bool
ErrorBadArgs(JSContext* cx)
{

View File

@ -1119,6 +1119,8 @@ struct Bool64x2 {
PropertyName* SimdTypeToName(JSContext* cx, SimdType type);
const char* SimdTypeToString(SimdType type);
template<typename V>
JSObject* CreateSimd(JSContext* cx, const typename V::Elem* data);

View File

@ -1344,6 +1344,21 @@ MSimdInsertElement::printOpcode(GenericPrinter& out) const
out.printf(" (%s)", MSimdInsertElement::LaneName(lane()));
}
void
MSimdBox::printOpcode(GenericPrinter& out) const
{
MDefinition::printOpcode(out);
out.printf(" (%s%s)", SimdTypeToString(simdType()),
initialHeap() == gc::TenuredHeap ? ", tenured" : "");
}
void
MSimdUnbox::printOpcode(GenericPrinter& out) const
{
MDefinition::printOpcode(out);
out.printf(" (%s)", SimdTypeToString(simdType()));
}
MCloneLiteral*
MCloneLiteral::New(TempAllocator& alloc, MDefinition* obj)
{

View File

@ -3489,6 +3489,7 @@ class MSimdBox
return AliasSet::None();
}
void printOpcode(GenericPrinter& out) const override;
bool writeRecoverData(CompactBufferWriter& writer) const override;
bool canRecoverOnBailout() const override {
return true;
@ -3534,6 +3535,8 @@ class MSimdUnbox
AliasSet getAliasSet() const override {
return AliasSet::None();
}
void printOpcode(GenericPrinter& out) const override;
};
// Creates a new derived type object. At runtime, this is just a call