Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_REGISTER_ALLOCATOR_VERIFIER_H_ | 5 #ifndef V8_REGISTER_ALLOCATOR_VERIFIER_H_ |
| 6 #define V8_REGISTER_ALLOCATOR_VERIFIER_H_ | 6 #define V8_REGISTER_ALLOCATOR_VERIFIER_H_ |
| 7 | 7 |
| 8 #include "src/zone-containers.h" | 8 #include "src/zone-containers.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 92 // FinalAssessmens are associated to operands that we know to be a certain | 92 // FinalAssessmens are associated to operands that we know to be a certain |
| 93 // virtual register. | 93 // virtual register. |
| 94 class FinalAssessment final : public Assessment { | 94 class FinalAssessment final : public Assessment { |
| 95 public: | 95 public: |
| 96 explicit FinalAssessment(int virtual_register, | 96 explicit FinalAssessment(int virtual_register, |
| 97 const PendingAssessment* original_pending = nullptr) | 97 const PendingAssessment* original_pending = nullptr) |
| 98 : Assessment(Final), | 98 : Assessment(Final), |
| 99 virtual_register_(virtual_register), | 99 virtual_register_(virtual_register), |
| 100 original_pending_assessment_(original_pending) {} | 100 original_pending_assessment_(original_pending) {} |
| 101 | 101 |
| 102 int virtual_register() const { return virtual_register_; } | |
| 103 static const FinalAssessment* cast(const Assessment* assessment) { | 102 static const FinalAssessment* cast(const Assessment* assessment) { |
| 104 CHECK(assessment->kind() == Final); | 103 CHECK(assessment->kind() == Final); |
| 105 return static_cast<const FinalAssessment*>(assessment); | 104 return static_cast<const FinalAssessment*>(assessment); |
| 106 } | 105 } |
| 107 | 106 |
| 107 int virtual_register() const { return virtual_register_; } | |
| 108 const PendingAssessment* original_pending_assessment() const { | 108 const PendingAssessment* original_pending_assessment() const { |
|
Mircea Trofin
2016/06/18 00:39:32
Can you move this line back to where it was, since
bbudge
2016/06/18 22:15:51
I moved it so it would be near the other getter, a
| |
| 109 return original_pending_assessment_; | 109 return original_pending_assessment_; |
| 110 } | 110 } |
| 111 | 111 |
| 112 private: | 112 private: |
| 113 int virtual_register_; | 113 int virtual_register_; |
| 114 const PendingAssessment* original_pending_assessment_; | 114 const PendingAssessment* original_pending_assessment_; |
| 115 | 115 |
| 116 DISALLOW_COPY_AND_ASSIGN(FinalAssessment); | 116 DISALLOW_COPY_AND_ASSIGN(FinalAssessment); |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 struct OperandAsKeyLess { | |
| 120 bool operator()(const InstructionOperand& a, | |
| 121 const InstructionOperand& b) const { | |
| 122 return a.CompareCanonicalized(b); | |
| 123 } | |
| 124 }; | |
| 125 | |
| 126 // Assessments associated with a basic block. | 119 // Assessments associated with a basic block. |
| 127 class BlockAssessments : public ZoneObject { | 120 class BlockAssessments : public ZoneObject { |
| 128 public: | 121 public: |
| 129 typedef ZoneMap<InstructionOperand, Assessment*, OperandAsKeyLess> OperandMap; | 122 typedef ZoneMap<InstructionOperand, Assessment*, CompareOperandModuloType> |
| 123 OperandMap; | |
| 130 explicit BlockAssessments(Zone* zone) | 124 explicit BlockAssessments(Zone* zone) |
| 131 : map_(zone), map_for_moves_(zone), zone_(zone) {} | 125 : map_(zone), map_for_moves_(zone), zone_(zone) {} |
| 132 void Drop(InstructionOperand operand) { map_.erase(operand); } | 126 void Drop(InstructionOperand operand) { map_.erase(operand); } |
| 133 void DropRegisters(); | 127 void DropRegisters(); |
| 134 void AddDefinition(InstructionOperand operand, int virtual_register) { | 128 void AddDefinition(InstructionOperand operand, int virtual_register) { |
| 135 auto existent = map_.find(operand); | 129 auto existent = map_.find(operand); |
| 136 if (existent != map_.end()) { | 130 if (existent != map_.end()) { |
| 137 // Drop the assignment | 131 // Drop the assignment |
| 138 map_.erase(existent); | 132 map_.erase(existent); |
| 139 } | 133 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 struct InstructionConstraint { | 191 struct InstructionConstraint { |
| 198 const Instruction* instruction_; | 192 const Instruction* instruction_; |
| 199 size_t operand_constaints_size_; | 193 size_t operand_constaints_size_; |
| 200 OperandConstraint* operand_constraints_; | 194 OperandConstraint* operand_constraints_; |
| 201 }; | 195 }; |
| 202 | 196 |
| 203 typedef ZoneVector<InstructionConstraint> Constraints; | 197 typedef ZoneVector<InstructionConstraint> Constraints; |
| 204 | 198 |
| 205 class DelayedAssessments : public ZoneObject { | 199 class DelayedAssessments : public ZoneObject { |
| 206 public: | 200 public: |
| 201 typedef ZoneMap<InstructionOperand, int, CompareOperandModuloType> | |
| 202 OperandMap; | |
| 207 explicit DelayedAssessments(Zone* zone) : map_(zone) {} | 203 explicit DelayedAssessments(Zone* zone) : map_(zone) {} |
| 208 | 204 |
| 209 const ZoneMap<InstructionOperand, int, OperandAsKeyLess>& map() const { | 205 const OperandMap& map() const { return map_; } |
| 210 return map_; | |
| 211 } | |
| 212 | 206 |
| 213 void AddDelayedAssessment(InstructionOperand op, int vreg) { | 207 void AddDelayedAssessment(InstructionOperand op, int vreg) { |
| 214 auto it = map_.find(op); | 208 auto it = map_.find(op); |
| 215 if (it == map_.end()) { | 209 if (it == map_.end()) { |
| 216 map_.insert(std::make_pair(op, vreg)); | 210 map_.insert(std::make_pair(op, vreg)); |
| 217 } else { | 211 } else { |
| 218 CHECK_EQ(it->second, vreg); | 212 CHECK_EQ(it->second, vreg); |
| 219 } | 213 } |
| 220 } | 214 } |
| 221 | 215 |
| 222 private: | 216 private: |
| 223 ZoneMap<InstructionOperand, int, OperandAsKeyLess> map_; | 217 OperandMap map_; |
| 224 }; | 218 }; |
| 225 | 219 |
| 226 Zone* zone() const { return zone_; } | 220 Zone* zone() const { return zone_; } |
| 227 const RegisterConfiguration* config() { return config_; } | 221 const RegisterConfiguration* config() { return config_; } |
| 228 const InstructionSequence* sequence() const { return sequence_; } | 222 const InstructionSequence* sequence() const { return sequence_; } |
| 229 Constraints* constraints() { return &constraints_; } | 223 Constraints* constraints() { return &constraints_; } |
| 230 | 224 |
| 231 static void VerifyInput(const OperandConstraint& constraint); | 225 static void VerifyInput(const OperandConstraint& constraint); |
| 232 static void VerifyTemp(const OperandConstraint& constraint); | 226 static void VerifyTemp(const OperandConstraint& constraint); |
| 233 static void VerifyOutput(const OperandConstraint& constraint); | 227 static void VerifyOutput(const OperandConstraint& constraint); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 257 ZoneMap<RpoNumber, DelayedAssessments*> outstanding_assessments_; | 251 ZoneMap<RpoNumber, DelayedAssessments*> outstanding_assessments_; |
| 258 | 252 |
| 259 DISALLOW_COPY_AND_ASSIGN(RegisterAllocatorVerifier); | 253 DISALLOW_COPY_AND_ASSIGN(RegisterAllocatorVerifier); |
| 260 }; | 254 }; |
| 261 | 255 |
| 262 } // namespace compiler | 256 } // namespace compiler |
| 263 } // namespace internal | 257 } // namespace internal |
| 264 } // namespace v8 | 258 } // namespace v8 |
| 265 | 259 |
| 266 #endif | 260 #endif |
| OLD | NEW |