mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
Bug 1031682 - Add OperandIter::settle to skip instructions with no operands. r=nbp
This commit is contained in:
parent
6cbdff01c3
commit
b11073fe1e
@ -181,11 +181,8 @@ LBlock::dump()
|
||||
static size_t
|
||||
TotalOperandCount(LRecoverInfo *recoverInfo)
|
||||
{
|
||||
LRecoverInfo::OperandIter it(recoverInfo->begin());
|
||||
LRecoverInfo::OperandIter end(recoverInfo->end());
|
||||
size_t accum = 0;
|
||||
|
||||
for (; it != end; ++it) {
|
||||
for (LRecoverInfo::OperandIter it(recoverInfo); !it; ++it) {
|
||||
if (!it->isRecoveredOnBailout())
|
||||
accum++;
|
||||
}
|
||||
|
@ -965,12 +965,22 @@ class LRecoverInfo : public TempObject
|
||||
{
|
||||
private:
|
||||
MNode **it_;
|
||||
MNode **end_;
|
||||
size_t op_;
|
||||
|
||||
public:
|
||||
explicit OperandIter(MNode **it)
|
||||
: it_(it), op_(0)
|
||||
{ }
|
||||
explicit OperandIter(LRecoverInfo *recoverInfo)
|
||||
: it_(recoverInfo->begin()), end_(recoverInfo->end()), op_(0)
|
||||
{
|
||||
settle();
|
||||
}
|
||||
|
||||
void settle() {
|
||||
while ((*it_)->numOperands() == 0) {
|
||||
++it_;
|
||||
op_ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
MDefinition *operator *() {
|
||||
return (*it_)->getOperand(op_);
|
||||
@ -985,11 +995,14 @@ class LRecoverInfo : public TempObject
|
||||
op_ = 0;
|
||||
++it_;
|
||||
}
|
||||
if (!*this)
|
||||
settle();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator !=(const OperandIter &where) const {
|
||||
return it_ != where.it_ || op_ != where.op_;
|
||||
operator bool() const {
|
||||
return it_ == end_;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
@ -317,9 +317,7 @@ CodeGeneratorShared::encode(LSnapshot *snapshot)
|
||||
#endif
|
||||
|
||||
uint32_t allocIndex = 0;
|
||||
LRecoverInfo::OperandIter it(recoverInfo->begin());
|
||||
LRecoverInfo::OperandIter end(recoverInfo->end());
|
||||
for (; it != end; ++it) {
|
||||
for (LRecoverInfo::OperandIter it(recoverInfo); !it; ++it) {
|
||||
DebugOnly<uint32_t> allocWritten = snapshots_.allocWritten();
|
||||
if (!encodeAllocation(snapshot, *it, &allocIndex))
|
||||
return false;
|
||||
|
@ -106,9 +106,7 @@ LIRGeneratorShared::buildSnapshot(LInstruction *ins, MResumePoint *rp, BailoutKi
|
||||
return nullptr;
|
||||
|
||||
size_t index = 0;
|
||||
LRecoverInfo::OperandIter it(recoverInfo->begin());
|
||||
LRecoverInfo::OperandIter end(recoverInfo->end());
|
||||
for (; it != end; ++it) {
|
||||
for (LRecoverInfo::OperandIter it(recoverInfo); !it; ++it) {
|
||||
// Check that optimized out operands are in eliminable slots.
|
||||
MOZ_ASSERT(it.canOptimizeOutIfUnused());
|
||||
|
||||
@ -166,9 +164,7 @@ LIRGeneratorShared::buildSnapshot(LInstruction *ins, MResumePoint *rp, BailoutKi
|
||||
return nullptr;
|
||||
|
||||
size_t index = 0;
|
||||
LRecoverInfo::OperandIter it(recoverInfo->begin());
|
||||
LRecoverInfo::OperandIter end(recoverInfo->end());
|
||||
for (; it != end; ++it) {
|
||||
for (LRecoverInfo::OperandIter it(recoverInfo); !it; ++it) {
|
||||
// Check that optimized out operands are in eliminable slots.
|
||||
MOZ_ASSERT(it.canOptimizeOutIfUnused());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user