Index: src/compiler/instruction-selector-impl.h |
diff --git a/src/compiler/instruction-selector-impl.h b/src/compiler/instruction-selector-impl.h |
index 31031d8410aa5029287fea421feae98bd1d672a0..5b1dfac4aba399c9e010f69208e3899a458a27e8 100644 |
--- a/src/compiler/instruction-selector-impl.h |
+++ b/src/compiler/instruction-selector-impl.h |
@@ -48,6 +48,7 @@ class OperandGenerator { |
} |
InstructionOperand* DefineAsConstant(Node* node) { |
+ selector()->MarkAsDefined(node); |
sequence()->AddConstant(node->id(), ToConstant(node)); |
return ConstantOperand::Create(node->id(), zone()); |
} |
@@ -179,12 +180,16 @@ class OperandGenerator { |
ASSERT_NOT_NULL(node); |
ASSERT_NOT_NULL(operand); |
operand->set_virtual_register(node->id()); |
+ selector()->MarkAsDefined(node); |
return operand; |
} |
UnallocatedOperand* Use(Node* node, UnallocatedOperand* operand) { |
- selector_->MarkAsUsed(node); |
- return Define(node, operand); |
+ ASSERT_NOT_NULL(node); |
+ ASSERT_NOT_NULL(operand); |
+ operand->set_virtual_register(node->id()); |
+ selector()->MarkAsUsed(node); |
+ return operand; |
} |
UnallocatedOperand* ToUnallocatedOperand(LinkageLocation location) { |
@@ -215,6 +220,8 @@ class OperandGenerator { |
// instruction and the branch or set it should be combined with. |
class FlagsContinuation V8_FINAL { |
public: |
+ FlagsContinuation() : mode_(kFlags_none) {} |
+ |
// Creates a new flags continuation from the given condition and true/false |
// blocks. |
FlagsContinuation(FlagsCondition condition, BasicBlock* true_block, |
@@ -236,7 +243,10 @@ class FlagsContinuation V8_FINAL { |
bool IsNone() const { return mode_ == kFlags_none; } |
bool IsBranch() const { return mode_ == kFlags_branch; } |
bool IsSet() const { return mode_ == kFlags_set; } |
- FlagsCondition condition() const { return condition_; } |
+ FlagsCondition condition() const { |
+ ASSERT(!IsNone()); |
+ return condition_; |
+ } |
Node* result() const { |
ASSERT(IsSet()); |
return result_; |
@@ -250,9 +260,13 @@ class FlagsContinuation V8_FINAL { |
return false_block_; |
} |
- void Negate() { condition_ = static_cast<FlagsCondition>(condition_ ^ 1); } |
+ void Negate() { |
+ ASSERT(!IsNone()); |
+ condition_ = static_cast<FlagsCondition>(condition_ ^ 1); |
+ } |
void Commute() { |
+ ASSERT(!IsNone()); |
switch (condition_) { |
case kEqual: |
case kNotEqual: |
@@ -312,8 +326,11 @@ class FlagsContinuation V8_FINAL { |
// Encodes this flags continuation into the given opcode. |
InstructionCode Encode(InstructionCode opcode) { |
- return opcode | FlagsModeField::encode(mode_) | |
- FlagsConditionField::encode(condition_); |
+ opcode |= FlagsModeField::encode(mode_); |
+ if (mode_ != kFlags_none) { |
+ opcode |= FlagsConditionField::encode(condition_); |
+ } |
+ return opcode; |
} |
private: |