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

Side by Side Diff: src/compiler/machine-operator.cc

Issue 1414183006: [turbofan] Avoid unnecessary write barriers and improve code generation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix typo. Created 5 years, 1 month 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/machine-operator.h" 5 #include "src/compiler/machine-operator.h"
6 6
7 #include "src/base/lazy-instance.h" 7 #include "src/base/lazy-instance.h"
8 #include "src/compiler/opcodes.h" 8 #include "src/compiler/opcodes.h"
9 #include "src/compiler/operator.h" 9 #include "src/compiler/operator.h"
10 10
(...skipping 16 matching lines...) Expand all
27 TruncationMode TruncationModeOf(Operator const* op) { 27 TruncationMode TruncationModeOf(Operator const* op) {
28 DCHECK_EQ(IrOpcode::kTruncateFloat64ToInt32, op->opcode()); 28 DCHECK_EQ(IrOpcode::kTruncateFloat64ToInt32, op->opcode());
29 return OpParameter<TruncationMode>(op); 29 return OpParameter<TruncationMode>(op);
30 } 30 }
31 31
32 32
33 std::ostream& operator<<(std::ostream& os, WriteBarrierKind kind) { 33 std::ostream& operator<<(std::ostream& os, WriteBarrierKind kind) {
34 switch (kind) { 34 switch (kind) {
35 case kNoWriteBarrier: 35 case kNoWriteBarrier:
36 return os << "NoWriteBarrier"; 36 return os << "NoWriteBarrier";
37 case kMapWriteBarrier:
38 return os << "MapWriteBarrier";
39 case kPointerWriteBarrier:
40 return os << "PointerWriteBarrier";
37 case kFullWriteBarrier: 41 case kFullWriteBarrier:
38 return os << "FullWriteBarrier"; 42 return os << "FullWriteBarrier";
39 } 43 }
40 UNREACHABLE(); 44 UNREACHABLE();
41 return os; 45 return os;
42 } 46 }
43 47
44 48
45 bool operator==(StoreRepresentation lhs, StoreRepresentation rhs) { 49 bool operator==(StoreRepresentation lhs, StoreRepresentation rhs) {
46 return lhs.machine_type() == rhs.machine_type() && 50 return lhs.machine_type() == rhs.machine_type() &&
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 : Operator1<StoreRepresentation>( \ 251 : Operator1<StoreRepresentation>( \
248 IrOpcode::kStore, Operator::kNoRead | Operator::kNoThrow, \ 252 IrOpcode::kStore, Operator::kNoRead | Operator::kNoThrow, \
249 "Store", 3, 1, 1, 0, 1, 0, \ 253 "Store", 3, 1, 1, 0, 1, 0, \
250 StoreRepresentation(k##Type, write_barrier_kind)) {} \ 254 StoreRepresentation(k##Type, write_barrier_kind)) {} \
251 }; \ 255 }; \
252 struct Store##Type##NoWriteBarrier##Operator final \ 256 struct Store##Type##NoWriteBarrier##Operator final \
253 : public Store##Type##Operator { \ 257 : public Store##Type##Operator { \
254 Store##Type##NoWriteBarrier##Operator() \ 258 Store##Type##NoWriteBarrier##Operator() \
255 : Store##Type##Operator(kNoWriteBarrier) {} \ 259 : Store##Type##Operator(kNoWriteBarrier) {} \
256 }; \ 260 }; \
261 struct Store##Type##MapWriteBarrier##Operator final \
262 : public Store##Type##Operator { \
263 Store##Type##MapWriteBarrier##Operator() \
264 : Store##Type##Operator(kMapWriteBarrier) {} \
265 }; \
266 struct Store##Type##PointerWriteBarrier##Operator final \
267 : public Store##Type##Operator { \
268 Store##Type##PointerWriteBarrier##Operator() \
269 : Store##Type##Operator(kPointerWriteBarrier) {} \
270 }; \
257 struct Store##Type##FullWriteBarrier##Operator final \ 271 struct Store##Type##FullWriteBarrier##Operator final \
258 : public Store##Type##Operator { \ 272 : public Store##Type##Operator { \
259 Store##Type##FullWriteBarrier##Operator() \ 273 Store##Type##FullWriteBarrier##Operator() \
260 : Store##Type##Operator(kFullWriteBarrier) {} \ 274 : Store##Type##Operator(kFullWriteBarrier) {} \
261 }; \ 275 }; \
262 struct CheckedStore##Type##Operator final \ 276 struct CheckedStore##Type##Operator final \
263 : public Operator1<CheckedStoreRepresentation> { \ 277 : public Operator1<CheckedStoreRepresentation> { \
264 CheckedStore##Type##Operator() \ 278 CheckedStore##Type##Operator() \
265 : Operator1<CheckedStoreRepresentation>( \ 279 : Operator1<CheckedStoreRepresentation>( \
266 IrOpcode::kCheckedStore, Operator::kNoRead | Operator::kNoThrow, \ 280 IrOpcode::kCheckedStore, Operator::kNoRead | Operator::kNoThrow, \
267 "CheckedStore", 4, 1, 1, 0, 1, 0, k##Type) {} \ 281 "CheckedStore", 4, 1, 1, 0, 1, 0, k##Type) {} \
268 }; \ 282 }; \
269 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \ 283 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \
284 Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \
285 Store##Type##PointerWriteBarrier##Operator \
286 kStore##Type##PointerWriteBarrier; \
270 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \ 287 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \
271 CheckedStore##Type##Operator kCheckedStore##Type; 288 CheckedStore##Type##Operator kCheckedStore##Type;
272 MACHINE_TYPE_LIST(STORE) 289 MACHINE_TYPE_LIST(STORE)
273 #undef STORE 290 #undef STORE
274 }; 291 };
275 292
276 293
277 static base::LazyInstance<MachineOperatorGlobalCache>::type kCache = 294 static base::LazyInstance<MachineOperatorGlobalCache>::type kCache =
278 LAZY_INSTANCE_INITIALIZER; 295 LAZY_INSTANCE_INITIALIZER;
279 296
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 default: 340 default:
324 break; 341 break;
325 } 342 }
326 UNREACHABLE(); 343 UNREACHABLE();
327 return nullptr; 344 return nullptr;
328 } 345 }
329 346
330 347
331 const Operator* MachineOperatorBuilder::Store(StoreRepresentation rep) { 348 const Operator* MachineOperatorBuilder::Store(StoreRepresentation rep) {
332 switch (rep.machine_type()) { 349 switch (rep.machine_type()) {
333 #define STORE(Type) \ 350 #define STORE(Type) \
334 case k##Type: \ 351 case k##Type: \
335 switch (rep.write_barrier_kind()) { \ 352 switch (rep.write_barrier_kind()) { \
336 case kNoWriteBarrier: \ 353 case kNoWriteBarrier: \
337 return &cache_.k##Store##Type##NoWriteBarrier; \ 354 return &cache_.k##Store##Type##NoWriteBarrier; \
338 case kFullWriteBarrier: \ 355 case kMapWriteBarrier: \
339 return &cache_.k##Store##Type##FullWriteBarrier; \ 356 return &cache_.k##Store##Type##MapWriteBarrier; \
340 } \ 357 case kPointerWriteBarrier: \
358 return &cache_.k##Store##Type##PointerWriteBarrier; \
359 case kFullWriteBarrier: \
360 return &cache_.k##Store##Type##FullWriteBarrier; \
361 } \
341 break; 362 break;
342 MACHINE_TYPE_LIST(STORE) 363 MACHINE_TYPE_LIST(STORE)
343 #undef STORE 364 #undef STORE
344 365
345 default: 366 default:
346 break; 367 break;
347 } 368 }
348 UNREACHABLE(); 369 UNREACHABLE();
349 return nullptr; 370 return nullptr;
350 } 371 }
(...skipping 26 matching lines...) Expand all
377 default: 398 default:
378 break; 399 break;
379 } 400 }
380 UNREACHABLE(); 401 UNREACHABLE();
381 return nullptr; 402 return nullptr;
382 } 403 }
383 404
384 } // namespace compiler 405 } // namespace compiler
385 } // namespace internal 406 } // namespace internal
386 } // namespace v8 407 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698