Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Unified Diff: src/compiler/register-allocator-verifier.cc

Issue 1081373002: [turbofan] cleanup ParallelMove (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/register-allocator.cc ('k') | src/zone-allocator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/register-allocator-verifier.cc
diff --git a/src/compiler/register-allocator-verifier.cc b/src/compiler/register-allocator-verifier.cc
index 6c337e6118a175657bcd65036c4a32ba8460e172..2a749dd5f8a61ed23aa6771689d231722ac4c4f6 100644
--- a/src/compiler/register-allocator-verifier.cc
+++ b/src/compiler/register-allocator-verifier.cc
@@ -10,12 +10,14 @@ namespace v8 {
namespace internal {
namespace compiler {
-static size_t OperandCount(const Instruction* instr) {
+namespace {
+
+size_t OperandCount(const Instruction* instr) {
return instr->InputCount() + instr->OutputCount() + instr->TempCount();
}
-static void VerifyEmptyGaps(const Instruction* instr) {
+void VerifyEmptyGaps(const Instruction* instr) {
for (int i = Instruction::FIRST_GAP_POSITION;
i <= Instruction::LAST_GAP_POSITION; i++) {
Instruction::GapPosition inner_pos =
@@ -25,6 +27,24 @@ static void VerifyEmptyGaps(const Instruction* instr) {
}
+void VerifyAllocatedGaps(const Instruction* instr) {
+ for (int i = Instruction::FIRST_GAP_POSITION;
+ i <= Instruction::LAST_GAP_POSITION; i++) {
+ Instruction::GapPosition inner_pos =
+ static_cast<Instruction::GapPosition>(i);
+ auto moves = instr->GetParallelMove(inner_pos);
+ if (moves == nullptr) continue;
+ for (auto move : *moves) {
+ if (move->IsRedundant()) continue;
+ CHECK(move->source().IsAllocated() || move->source().IsConstant());
+ CHECK(move->destination().IsAllocated());
+ }
+ }
+}
+
+} // namespace
+
+
void RegisterAllocatorVerifier::VerifyInput(
const OperandConstraint& constraint) {
CHECK_NE(kSameAsFirst, constraint.type_);
@@ -94,6 +114,8 @@ void RegisterAllocatorVerifier::VerifyAssignment() {
auto instr_it = sequence()->begin();
for (const auto& instr_constraint : *constraints()) {
const auto* instr = instr_constraint.instruction_;
+ // All gaps should be totally allocated at this point.
+ VerifyAllocatedGaps(instr);
const size_t operand_count = instr_constraint.operand_constaints_size_;
const auto* op_constraints = instr_constraint.operand_constraints_;
CHECK_EQ(instr, *instr_it);
@@ -298,7 +320,7 @@ class OperandMap : public ZoneObject {
this->erase(it++);
if (it == this->end()) return;
}
- if (it->first->Equals(o.first)) {
+ if (*it->first == *o.first) {
++it;
if (it == this->end()) return;
} else {
@@ -312,23 +334,22 @@ class OperandMap : public ZoneObject {
Map& map() { return map_; }
- void RunParallelMoves(Zone* zone, const ParallelMove* move) {
+ void RunParallelMoves(Zone* zone, const ParallelMove* moves) {
// Compute outgoing mappings.
Map to_insert(zone);
- auto moves = move->move_operands();
- for (auto i = moves->begin(); i != moves->end(); ++i) {
- if (i->IsEliminated()) continue;
- auto cur = map().find(i->source());
+ for (auto move : *moves) {
+ if (move->IsEliminated()) continue;
+ auto cur = map().find(&move->source());
CHECK(cur != map().end());
auto res =
- to_insert.insert(std::make_pair(i->destination(), cur->second));
+ to_insert.insert(std::make_pair(&move->destination(), cur->second));
// Ensure injectivity of moves.
CHECK(res.second);
}
// Drop current mappings.
- for (auto i = moves->begin(); i != moves->end(); ++i) {
- if (i->IsEliminated()) continue;
- auto cur = map().find(i->destination());
+ for (auto move : *moves) {
+ if (move->IsEliminated()) continue;
+ auto cur = map().find(&move->destination());
if (cur != map().end()) map().erase(cur);
}
// Insert new values.
« no previous file with comments | « src/compiler/register-allocator.cc ('k') | src/zone-allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698