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

Side by Side Diff: src/compiler/instruction-selector-impl.h

Issue 1721103003: [turbofan] Introduce DeoptimizeIf And DeoptimizeUnless common operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add comments Created 4 years, 10 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
« no previous file with comments | « src/compiler/instruction-selector.cc ('k') | src/compiler/js-call-reducer.h » ('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 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
6 #define V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_ 6 #define V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
7 7
8 #include "src/compiler/instruction.h" 8 #include "src/compiler/instruction.h"
9 #include "src/compiler/instruction-selector.h" 9 #include "src/compiler/instruction-selector.h"
10 #include "src/compiler/linkage.h" 10 #include "src/compiler/linkage.h"
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 FlagsContinuation(FlagsCondition condition, BasicBlock* true_block, 296 FlagsContinuation(FlagsCondition condition, BasicBlock* true_block,
297 BasicBlock* false_block) 297 BasicBlock* false_block)
298 : mode_(kFlags_branch), 298 : mode_(kFlags_branch),
299 condition_(condition), 299 condition_(condition),
300 true_block_(true_block), 300 true_block_(true_block),
301 false_block_(false_block) { 301 false_block_(false_block) {
302 DCHECK_NOT_NULL(true_block); 302 DCHECK_NOT_NULL(true_block);
303 DCHECK_NOT_NULL(false_block); 303 DCHECK_NOT_NULL(false_block);
304 } 304 }
305 305
306 // Creates a new flags continuation from the given condition and result node. 306 // Creates a new flags continuation for an eager deoptimization exit.
307 FlagsContinuation(FlagsCondition condition, Node* result) 307 static FlagsContinuation ForDeoptimize(FlagsCondition condition,
308 : mode_(kFlags_set), condition_(condition), result_(result) { 308 Node* frame_state) {
309 DCHECK_NOT_NULL(result); 309 return FlagsContinuation(kFlags_deoptimize, condition, frame_state);
310 }
311
312 // Creates a new flags continuation for a boolean value.
313 static FlagsContinuation ForSet(FlagsCondition condition, Node* result) {
314 return FlagsContinuation(kFlags_set, condition, result);
310 } 315 }
311 316
312 bool IsNone() const { return mode_ == kFlags_none; } 317 bool IsNone() const { return mode_ == kFlags_none; }
313 bool IsBranch() const { return mode_ == kFlags_branch; } 318 bool IsBranch() const { return mode_ == kFlags_branch; }
319 bool IsDeoptimize() const { return mode_ == kFlags_deoptimize; }
314 bool IsSet() const { return mode_ == kFlags_set; } 320 bool IsSet() const { return mode_ == kFlags_set; }
315 FlagsCondition condition() const { 321 FlagsCondition condition() const {
316 DCHECK(!IsNone()); 322 DCHECK(!IsNone());
317 return condition_; 323 return condition_;
318 } 324 }
325 Node* frame_state() const {
326 DCHECK(IsDeoptimize());
327 return frame_state_or_result_;
328 }
319 Node* result() const { 329 Node* result() const {
320 DCHECK(IsSet()); 330 DCHECK(IsSet());
321 return result_; 331 return frame_state_or_result_;
322 } 332 }
323 BasicBlock* true_block() const { 333 BasicBlock* true_block() const {
324 DCHECK(IsBranch()); 334 DCHECK(IsBranch());
325 return true_block_; 335 return true_block_;
326 } 336 }
327 BasicBlock* false_block() const { 337 BasicBlock* false_block() const {
328 DCHECK(IsBranch()); 338 DCHECK(IsBranch());
329 return false_block_; 339 return false_block_;
330 } 340 }
331 341
(...skipping 16 matching lines...) Expand all
348 // Encodes this flags continuation into the given opcode. 358 // Encodes this flags continuation into the given opcode.
349 InstructionCode Encode(InstructionCode opcode) { 359 InstructionCode Encode(InstructionCode opcode) {
350 opcode |= FlagsModeField::encode(mode_); 360 opcode |= FlagsModeField::encode(mode_);
351 if (mode_ != kFlags_none) { 361 if (mode_ != kFlags_none) {
352 opcode |= FlagsConditionField::encode(condition_); 362 opcode |= FlagsConditionField::encode(condition_);
353 } 363 }
354 return opcode; 364 return opcode;
355 } 365 }
356 366
357 private: 367 private:
358 FlagsMode mode_; 368 FlagsContinuation(FlagsMode mode, FlagsCondition condition,
369 Node* frame_state_or_result)
370 : mode_(mode),
371 condition_(condition),
372 frame_state_or_result_(frame_state_or_result) {
373 DCHECK_NOT_NULL(frame_state_or_result);
374 }
375
376 FlagsMode const mode_;
359 FlagsCondition condition_; 377 FlagsCondition condition_;
360 Node* result_; // Only valid if mode_ == kFlags_set. 378 Node* frame_state_or_result_; // Only valid if mode_ == kFlags_deoptimize
361 BasicBlock* true_block_; // Only valid if mode_ == kFlags_branch. 379 // or mode_ == kFlags_set.
362 BasicBlock* false_block_; // Only valid if mode_ == kFlags_branch. 380 BasicBlock* true_block_; // Only valid if mode_ == kFlags_branch.
381 BasicBlock* false_block_; // Only valid if mode_ == kFlags_branch.
363 }; 382 };
364 383
365 } // namespace compiler 384 } // namespace compiler
366 } // namespace internal 385 } // namespace internal
367 } // namespace v8 386 } // namespace v8
368 387
369 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_ 388 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
OLDNEW
« no previous file with comments | « src/compiler/instruction-selector.cc ('k') | src/compiler/js-call-reducer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698