summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/instruction-selector-impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/compiler/instruction-selector-impl.h')
-rw-r--r--chromium/v8/src/compiler/instruction-selector-impl.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/chromium/v8/src/compiler/instruction-selector-impl.h b/chromium/v8/src/compiler/instruction-selector-impl.h
index 8334d1751ac..7c7a2708c51 100644
--- a/chromium/v8/src/compiler/instruction-selector-impl.h
+++ b/chromium/v8/src/compiler/instruction-selector-impl.h
@@ -251,6 +251,23 @@ class OperandGenerator {
return Constant(OpParameter<ExternalReference>(node));
case IrOpcode::kHeapConstant:
return Constant(OpParameter<Handle<HeapObject>>(node));
+ case IrOpcode::kDeadValue: {
+ switch (DeadValueRepresentationOf(node->op())) {
+ case MachineRepresentation::kBit:
+ case MachineRepresentation::kWord32:
+ case MachineRepresentation::kTagged:
+ case MachineRepresentation::kTaggedSigned:
+ case MachineRepresentation::kTaggedPointer:
+ return Constant(static_cast<int32_t>(0));
+ case MachineRepresentation::kFloat64:
+ return Constant(static_cast<double>(0));
+ case MachineRepresentation::kFloat32:
+ return Constant(static_cast<float>(0));
+ default:
+ UNREACHABLE();
+ }
+ break;
+ }
default:
break;
}
@@ -350,8 +367,9 @@ class FlagsContinuation final {
static FlagsContinuation ForDeoptimize(FlagsCondition condition,
DeoptimizeKind kind,
DeoptimizeReason reason,
+ VectorSlotPair const& feedback,
Node* frame_state) {
- return FlagsContinuation(condition, kind, reason, frame_state);
+ return FlagsContinuation(condition, kind, reason, feedback, frame_state);
}
// Creates a new flags continuation for a boolean value.
@@ -382,6 +400,10 @@ class FlagsContinuation final {
DCHECK(IsDeoptimize());
return reason_;
}
+ VectorSlotPair const& feedback() const {
+ DCHECK(IsDeoptimize());
+ return feedback_;
+ }
Node* frame_state() const {
DCHECK(IsDeoptimize());
return frame_state_or_result_;
@@ -452,11 +474,13 @@ class FlagsContinuation final {
private:
FlagsContinuation(FlagsCondition condition, DeoptimizeKind kind,
- DeoptimizeReason reason, Node* frame_state)
+ DeoptimizeReason reason, VectorSlotPair const& feedback,
+ Node* frame_state)
: mode_(kFlags_deoptimize),
condition_(condition),
kind_(kind),
reason_(reason),
+ feedback_(feedback),
frame_state_or_result_(frame_state) {
DCHECK_NOT_NULL(frame_state);
}
@@ -480,6 +504,7 @@ class FlagsContinuation final {
FlagsCondition condition_;
DeoptimizeKind kind_; // Only valid if mode_ == kFlags_deoptimize
DeoptimizeReason reason_; // Only valid if mode_ == kFlags_deoptimize
+ VectorSlotPair feedback_; // Only valid if mode_ == kFlags_deoptimize
Node* frame_state_or_result_; // Only valid if mode_ == kFlags_deoptimize
// or mode_ == kFlags_set.
BasicBlock* true_block_; // Only valid if mode_ == kFlags_branch.