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

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

Issue 1511883002: [turbofan] Add initial support for SOFT deopts. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « src/compiler/common-operator.h ('k') | src/compiler/ia32/code-generator-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 6
7 #include "src/assembler.h" 7 #include "src/assembler.h"
8 #include "src/base/lazy-instance.h" 8 #include "src/base/lazy-instance.h"
9 #include "src/compiler/linkage.h" 9 #include "src/compiler/linkage.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 18 matching lines...) Expand all
29 return os; 29 return os;
30 } 30 }
31 31
32 32
33 BranchHint BranchHintOf(const Operator* const op) { 33 BranchHint BranchHintOf(const Operator* const op) {
34 DCHECK_EQ(IrOpcode::kBranch, op->opcode()); 34 DCHECK_EQ(IrOpcode::kBranch, op->opcode());
35 return OpParameter<BranchHint>(op); 35 return OpParameter<BranchHint>(op);
36 } 36 }
37 37
38 38
39 size_t hash_value(DeoptimizeKind kind) { return static_cast<size_t>(kind); }
40
41
42 std::ostream& operator<<(std::ostream& os, DeoptimizeKind kind) {
43 switch (kind) {
44 case DeoptimizeKind::kEager:
45 return os << "Eager";
46 case DeoptimizeKind::kSoft:
47 return os << "Soft";
48 }
49 UNREACHABLE();
50 return os;
51 }
52
53
54 DeoptimizeKind DeoptimizeKindOf(const Operator* const op) {
55 DCHECK_EQ(IrOpcode::kDeoptimize, op->opcode());
56 return OpParameter<DeoptimizeKind>(op);
57 }
58
59
39 size_t hash_value(IfExceptionHint hint) { return static_cast<size_t>(hint); } 60 size_t hash_value(IfExceptionHint hint) { return static_cast<size_t>(hint); }
40 61
41 62
42 std::ostream& operator<<(std::ostream& os, IfExceptionHint hint) { 63 std::ostream& operator<<(std::ostream& os, IfExceptionHint hint) {
43 switch (hint) { 64 switch (hint) {
44 case IfExceptionHint::kLocallyCaught: 65 case IfExceptionHint::kLocallyCaught:
45 return os << "Caught"; 66 return os << "Caught";
46 case IfExceptionHint::kLocallyUncaught: 67 case IfExceptionHint::kLocallyUncaught:
47 return os << "Uncaught"; 68 return os << "Uncaught";
48 } 69 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } 136 }
116 137
117 138
118 #define CACHED_OP_LIST(V) \ 139 #define CACHED_OP_LIST(V) \
119 V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \ 140 V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \
120 V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 141 V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
121 V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 142 V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
122 V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 143 V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
123 V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ 144 V(IfDefault, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
124 V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \ 145 V(Throw, Operator::kKontrol, 1, 1, 1, 0, 0, 1) \
125 V(Deoptimize, Operator::kNoThrow, 1, 1, 1, 0, 0, 1) \
126 V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \ 146 V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \
127 V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ 147 V(OsrNormalEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \
128 V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \ 148 V(OsrLoopEntry, Operator::kFoldable, 0, 1, 1, 0, 1, 1) \
129 V(BeginRegion, Operator::kNoThrow, 0, 1, 0, 0, 1, 0) \ 149 V(BeginRegion, Operator::kNoThrow, 0, 1, 0, 0, 1, 0) \
130 V(FinishRegion, Operator::kNoThrow, 1, 1, 0, 1, 1, 0) 150 V(FinishRegion, Operator::kNoThrow, 1, 1, 0, 1, 1, 0)
131 151
132 152
133 #define CACHED_RETURN_LIST(V) \ 153 #define CACHED_RETURN_LIST(V) \
134 V(1) \ 154 V(1) \
135 V(2) \ 155 V(2) \
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 Name##Operator() \ 244 Name##Operator() \
225 : Operator(IrOpcode::k##Name, properties, #Name, value_input_count, \ 245 : Operator(IrOpcode::k##Name, properties, #Name, value_input_count, \
226 effect_input_count, control_input_count, \ 246 effect_input_count, control_input_count, \
227 value_output_count, effect_output_count, \ 247 value_output_count, effect_output_count, \
228 control_output_count) {} \ 248 control_output_count) {} \
229 }; \ 249 }; \
230 Name##Operator k##Name##Operator; 250 Name##Operator k##Name##Operator;
231 CACHED_OP_LIST(CACHED) 251 CACHED_OP_LIST(CACHED)
232 #undef CACHED 252 #undef CACHED
233 253
254 template <DeoptimizeKind kKind>
255 struct DeoptimizeOperator final : public Operator1<DeoptimizeKind> {
256 DeoptimizeOperator()
257 : Operator1<DeoptimizeKind>( // --
258 IrOpcode::kDeoptimize, Operator::kNoThrow, // opcode
259 "Deoptimize", // name
260 1, 1, 1, 0, 0, 1, // counts
261 kKind) {} // parameter
262 };
263 DeoptimizeOperator<DeoptimizeKind::kEager> kDeoptimizeEagerOperator;
264 DeoptimizeOperator<DeoptimizeKind::kSoft> kDeoptimizeSoftOperator;
265
234 template <IfExceptionHint kCaughtLocally> 266 template <IfExceptionHint kCaughtLocally>
235 struct IfExceptionOperator final : public Operator1<IfExceptionHint> { 267 struct IfExceptionOperator final : public Operator1<IfExceptionHint> {
236 IfExceptionOperator() 268 IfExceptionOperator()
237 : Operator1<IfExceptionHint>( // -- 269 : Operator1<IfExceptionHint>( // --
238 IrOpcode::kIfException, Operator::kKontrol, // opcode 270 IrOpcode::kIfException, Operator::kKontrol, // opcode
239 "IfException", // name 271 "IfException", // name
240 0, 1, 1, 1, 1, 1, // counts 272 0, 1, 1, 1, 1, 1, // counts
241 kCaughtLocally) {} // parameter 273 kCaughtLocally) {} // parameter
242 }; 274 };
243 IfExceptionOperator<IfExceptionHint::kLocallyCaught> kIfExceptionCOperator; 275 IfExceptionOperator<IfExceptionHint::kLocallyCaught> kIfExceptionCOperator;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 case BranchHint::kTrue: 473 case BranchHint::kTrue:
442 return &cache_.kBranchTrueOperator; 474 return &cache_.kBranchTrueOperator;
443 case BranchHint::kFalse: 475 case BranchHint::kFalse:
444 return &cache_.kBranchFalseOperator; 476 return &cache_.kBranchFalseOperator;
445 } 477 }
446 UNREACHABLE(); 478 UNREACHABLE();
447 return nullptr; 479 return nullptr;
448 } 480 }
449 481
450 482
483 const Operator* CommonOperatorBuilder::Deoptimize(DeoptimizeKind kind) {
484 switch (kind) {
485 case DeoptimizeKind::kEager:
486 return &cache_.kDeoptimizeEagerOperator;
487 case DeoptimizeKind::kSoft:
488 return &cache_.kDeoptimizeSoftOperator;
489 }
490 UNREACHABLE();
491 return nullptr;
492 }
493
494
451 const Operator* CommonOperatorBuilder::IfException(IfExceptionHint hint) { 495 const Operator* CommonOperatorBuilder::IfException(IfExceptionHint hint) {
452 switch (hint) { 496 switch (hint) {
453 case IfExceptionHint::kLocallyCaught: 497 case IfExceptionHint::kLocallyCaught:
454 return &cache_.kIfExceptionCOperator; 498 return &cache_.kIfExceptionCOperator;
455 case IfExceptionHint::kLocallyUncaught: 499 case IfExceptionHint::kLocallyUncaught:
456 return &cache_.kIfExceptionUOperator; 500 return &cache_.kIfExceptionUOperator;
457 } 501 }
458 UNREACHABLE(); 502 UNREACHABLE();
459 return nullptr; 503 return nullptr;
460 } 504 }
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 Handle<SharedFunctionInfo> shared_info, 852 Handle<SharedFunctionInfo> shared_info,
809 ContextCallingMode context_calling_mode) { 853 ContextCallingMode context_calling_mode) {
810 return new (zone()->New(sizeof(FrameStateFunctionInfo))) 854 return new (zone()->New(sizeof(FrameStateFunctionInfo)))
811 FrameStateFunctionInfo(type, parameter_count, local_count, shared_info, 855 FrameStateFunctionInfo(type, parameter_count, local_count, shared_info,
812 context_calling_mode); 856 context_calling_mode);
813 } 857 }
814 858
815 } // namespace compiler 859 } // namespace compiler
816 } // namespace internal 860 } // namespace internal
817 } // namespace v8 861 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/common-operator.h ('k') | src/compiler/ia32/code-generator-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698