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

Side by Side Diff: src/compiler/instruction.cc

Issue 1389373002: [turbofan] Create ExplicitOperands to specify operands without virtual registers (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tweaks Created 5 years, 2 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 unified diff | Download patch
OLDNEW
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 #include "src/compiler/common-operator.h" 5 #include "src/compiler/common-operator.h"
6 #include "src/compiler/graph.h" 6 #include "src/compiler/graph.h"
7 #include "src/compiler/instruction.h" 7 #include "src/compiler/instruction.h"
8 #include "src/compiler/schedule.h" 8 #include "src/compiler/schedule.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 << "]"; 98 << "]";
99 case InstructionOperand::IMMEDIATE: { 99 case InstructionOperand::IMMEDIATE: {
100 auto imm = ImmediateOperand::cast(op); 100 auto imm = ImmediateOperand::cast(op);
101 switch (imm.type()) { 101 switch (imm.type()) {
102 case ImmediateOperand::INLINE: 102 case ImmediateOperand::INLINE:
103 return os << "#" << imm.inline_value(); 103 return os << "#" << imm.inline_value();
104 case ImmediateOperand::INDEXED: 104 case ImmediateOperand::INDEXED:
105 return os << "[immediate:" << imm.indexed_value() << "]"; 105 return os << "[immediate:" << imm.indexed_value() << "]";
106 } 106 }
107 } 107 }
108 case InstructionOperand::EXPLICIT:
Mircea Trofin 2015/10/15 15:05:38 Would it help debugging if Explicit had some extra
danno 2015/10/23 08:07:49 Done
108 case InstructionOperand::ALLOCATED: { 109 case InstructionOperand::ALLOCATED: {
109 auto allocated = AllocatedOperand::cast(op); 110 auto allocated = LocationOperand::cast(op);
110 switch (allocated.allocated_kind()) { 111 if (op.IsStackSlot()) {
111 case AllocatedOperand::STACK_SLOT: 112 os << "[stack:" << LocationOperand::cast(op).index();
112 os << "[stack:" << StackSlotOperand::cast(op).index(); 113 } else if (op.IsDoubleStackSlot()) {
113 break; 114 os << "[double_stack:" << LocationOperand::cast(op).index();
114 case AllocatedOperand::DOUBLE_STACK_SLOT: 115 } else if (op.IsRegister()) {
115 os << "[double_stack:" << DoubleStackSlotOperand::cast(op).index(); 116 os << "[" << LocationOperand::cast(op).GetRegister().ToString() << "|R";
116 break; 117 } else {
117 case AllocatedOperand::REGISTER: 118 DCHECK(op.IsDoubleRegister());
118 os << "[" << RegisterOperand::cast(op).GetRegister().ToString() 119 os << "[" << LocationOperand::cast(op).GetDoubleRegister().ToString()
119 << "|R"; 120 << "|R";
120 break;
121 case AllocatedOperand::DOUBLE_REGISTER:
122 os << "[" << DoubleRegisterOperand::cast(op).GetRegister().ToString()
123 << "|R";
124 break;
125 } 121 }
126 switch (allocated.machine_type()) { 122 switch (allocated.machine_type()) {
127 case kRepWord32: 123 case kRepWord32:
128 os << "|w32"; 124 os << "|w32";
129 break; 125 break;
130 case kRepWord64: 126 case kRepWord64:
131 os << "|w64"; 127 os << "|w64";
132 break; 128 break;
133 case kRepFloat32: 129 case kRepFloat32:
134 os << "|f32"; 130 os << "|f32";
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 169 }
174 return true; 170 return true;
175 } 171 }
176 172
177 173
178 MoveOperands* ParallelMove::PrepareInsertAfter(MoveOperands* move) const { 174 MoveOperands* ParallelMove::PrepareInsertAfter(MoveOperands* move) const {
179 MoveOperands* replacement = nullptr; 175 MoveOperands* replacement = nullptr;
180 MoveOperands* to_eliminate = nullptr; 176 MoveOperands* to_eliminate = nullptr;
181 for (auto curr : *this) { 177 for (auto curr : *this) {
182 if (curr->IsEliminated()) continue; 178 if (curr->IsEliminated()) continue;
183 if (curr->destination().EqualsModuloType(move->source())) { 179 if (curr->destination().EqualsCanonicalizeType(move->source())) {
184 DCHECK(!replacement); 180 DCHECK(!replacement);
185 replacement = curr; 181 replacement = curr;
186 if (to_eliminate != nullptr) break; 182 if (to_eliminate != nullptr) break;
187 } else if (curr->destination().EqualsModuloType(move->destination())) { 183 } else if (curr->destination().EqualsCanonicalizeType(
184 move->destination())) {
188 DCHECK(!to_eliminate); 185 DCHECK(!to_eliminate);
189 to_eliminate = curr; 186 to_eliminate = curr;
190 if (replacement != nullptr) break; 187 if (replacement != nullptr) break;
191 } 188 }
192 } 189 }
193 DCHECK_IMPLIES(replacement == to_eliminate, replacement == nullptr); 190 DCHECK_IMPLIES(replacement == to_eliminate, replacement == nullptr);
194 if (replacement != nullptr) move->set_source(replacement->source()); 191 if (replacement != nullptr) move->set_source(replacement->source());
195 return to_eliminate; 192 return to_eliminate;
196 } 193 }
197 194
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 first = false; 252 first = false;
256 PrintableMoveOperands pmo = {printable.register_configuration_, move}; 253 PrintableMoveOperands pmo = {printable.register_configuration_, move};
257 os << pmo; 254 os << pmo;
258 } 255 }
259 return os; 256 return os;
260 } 257 }
261 258
262 259
263 void ReferenceMap::RecordReference(const AllocatedOperand& op) { 260 void ReferenceMap::RecordReference(const AllocatedOperand& op) {
264 // Do not record arguments as pointers. 261 // Do not record arguments as pointers.
265 if (op.IsStackSlot() && StackSlotOperand::cast(op).index() < 0) return; 262 if (op.IsStackSlot() && LocationOperand::cast(op).index() < 0) return;
266 DCHECK(!op.IsDoubleRegister() && !op.IsDoubleStackSlot()); 263 DCHECK(!op.IsDoubleRegister() && !op.IsDoubleStackSlot());
267 reference_operands_.push_back(op); 264 reference_operands_.push_back(op);
268 } 265 }
269 266
270 267
271 std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm) { 268 std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm) {
272 os << "{"; 269 os << "{";
273 bool first = true; 270 bool first = true;
274 PrintableInstructionOperand poi = {RegisterConfiguration::ArchDefault(), 271 PrintableInstructionOperand poi = {RegisterConfiguration::ArchDefault(),
275 InstructionOperand()}; 272 InstructionOperand()};
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 os << " B" << succ.ToInt(); 872 os << " B" << succ.ToInt();
876 } 873 }
877 os << "\n"; 874 os << "\n";
878 } 875 }
879 return os; 876 return os;
880 } 877 }
881 878
882 } // namespace compiler 879 } // namespace compiler
883 } // namespace internal 880 } // namespace internal
884 } // namespace v8 881 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698