Remove HIsNilAndBranch (it's now unused)
R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/14971005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14660 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
cfe3e039ca
commit
6862babfd6
@ -217,15 +217,6 @@ void LCmpIDAndBranch::PrintDataTo(StringStream* stream) {
|
||||
}
|
||||
|
||||
|
||||
void LIsNilAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if ");
|
||||
value()->PrintTo(stream);
|
||||
stream->Add(kind() == kStrictEquality ? " === " : " == ");
|
||||
stream->Add(nil() == kNullValue ? "null" : "undefined");
|
||||
stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
||||
}
|
||||
|
||||
|
||||
void LIsObjectAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if is_object(");
|
||||
value()->PrintTo(stream);
|
||||
@ -1719,12 +1710,6 @@ LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsNilAndBranch(HIsNilAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
return new(zone()) LIsNilAndBranch(UseRegisterAtStart(instr->value()));
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
LOperand* value = UseRegisterAtStart(instr->value());
|
||||
|
@ -113,7 +113,6 @@ class LCodeGen;
|
||||
V(Uint32ToDouble) \
|
||||
V(InvokeFunction) \
|
||||
V(IsConstructCallAndBranch) \
|
||||
V(IsNilAndBranch) \
|
||||
V(IsObjectAndBranch) \
|
||||
V(IsStringAndBranch) \
|
||||
V(IsSmiAndBranch) \
|
||||
@ -885,24 +884,6 @@ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
|
||||
};
|
||||
|
||||
|
||||
class LIsNilAndBranch: public LControlInstruction<1, 0> {
|
||||
public:
|
||||
explicit LIsNilAndBranch(LOperand* value) {
|
||||
inputs_[0] = value;
|
||||
}
|
||||
|
||||
LOperand* value() { return inputs_[0]; }
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch")
|
||||
DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch)
|
||||
|
||||
EqualityKind kind() const { return hydrogen()->kind(); }
|
||||
NilValue nil() const { return hydrogen()->nil(); }
|
||||
|
||||
virtual void PrintDataTo(StringStream* stream);
|
||||
};
|
||||
|
||||
|
||||
class LIsObjectAndBranch: public LControlInstruction<1, 1> {
|
||||
public:
|
||||
LIsObjectAndBranch(LOperand* value, LOperand* temp) {
|
||||
|
@ -2419,48 +2419,6 @@ void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoIsNilAndBranch(LIsNilAndBranch* instr) {
|
||||
Register scratch = scratch0();
|
||||
Register reg = ToRegister(instr->value());
|
||||
int false_block = chunk_->LookupDestination(instr->false_block_id());
|
||||
|
||||
// If the expression is known to be untagged or a smi, then it's definitely
|
||||
// not null, and it can't be a an undetectable object.
|
||||
if (instr->hydrogen()->representation().IsSpecialization() ||
|
||||
instr->hydrogen()->type().IsSmi()) {
|
||||
EmitGoto(false_block);
|
||||
return;
|
||||
}
|
||||
|
||||
int true_block = chunk_->LookupDestination(instr->true_block_id());
|
||||
Heap::RootListIndex nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kNullValueRootIndex :
|
||||
Heap::kUndefinedValueRootIndex;
|
||||
__ LoadRoot(ip, nil_value);
|
||||
__ cmp(reg, ip);
|
||||
if (instr->kind() == kStrictEquality) {
|
||||
EmitBranch(true_block, false_block, eq);
|
||||
} else {
|
||||
Heap::RootListIndex other_nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kUndefinedValueRootIndex :
|
||||
Heap::kNullValueRootIndex;
|
||||
Label* true_label = chunk_->GetAssemblyLabel(true_block);
|
||||
Label* false_label = chunk_->GetAssemblyLabel(false_block);
|
||||
__ b(eq, true_label);
|
||||
__ LoadRoot(ip, other_nil_value);
|
||||
__ cmp(reg, ip);
|
||||
__ b(eq, true_label);
|
||||
__ JumpIfSmi(reg, false_label);
|
||||
// Check for undetectable objects by looking in the bit field in
|
||||
// the map. The object has already been smi checked.
|
||||
__ ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
||||
__ ldrb(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset));
|
||||
__ tst(scratch, Operand(1 << Map::kIsUndetectable));
|
||||
EmitBranch(true_block, false_block, ne);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Condition LCodeGen::EmitIsObject(Register input,
|
||||
Register temp1,
|
||||
Label* is_not_object,
|
||||
|
@ -1254,14 +1254,6 @@ void HUnaryControlInstruction::PrintDataTo(StringStream* stream) {
|
||||
}
|
||||
|
||||
|
||||
void HIsNilAndBranch::PrintDataTo(StringStream* stream) {
|
||||
value()->PrintNameTo(stream);
|
||||
stream->Add(kind() == kStrictEquality ? " === " : " == ");
|
||||
stream->Add(nil() == kNullValue ? "null" : "undefined");
|
||||
HControlInstruction::PrintDataTo(stream);
|
||||
}
|
||||
|
||||
|
||||
void HReturn::PrintDataTo(StringStream* stream) {
|
||||
value()->PrintNameTo(stream);
|
||||
stream->Add(" (pop ");
|
||||
|
@ -127,7 +127,6 @@ class LChunkBuilder;
|
||||
V(InstanceSize) \
|
||||
V(InvokeFunction) \
|
||||
V(IsConstructCallAndBranch) \
|
||||
V(IsNilAndBranch) \
|
||||
V(IsObjectAndBranch) \
|
||||
V(IsStringAndBranch) \
|
||||
V(IsSmiAndBranch) \
|
||||
@ -3921,31 +3920,6 @@ class HCompareConstantEqAndBranch: public HUnaryControlInstruction {
|
||||
};
|
||||
|
||||
|
||||
class HIsNilAndBranch: public HUnaryControlInstruction {
|
||||
public:
|
||||
HIsNilAndBranch(HValue* value, EqualityKind kind, NilValue nil)
|
||||
: HUnaryControlInstruction(value, NULL, NULL), kind_(kind), nil_(nil) { }
|
||||
|
||||
EqualityKind kind() const { return kind_; }
|
||||
NilValue nil() const { return nil_; }
|
||||
|
||||
virtual void PrintDataTo(StringStream* stream);
|
||||
|
||||
virtual Representation RequiredInputRepresentation(int index) {
|
||||
return Representation::Tagged();
|
||||
}
|
||||
virtual Representation observed_input_representation(int index) {
|
||||
return Representation::Tagged();
|
||||
}
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch)
|
||||
|
||||
private:
|
||||
EqualityKind kind_;
|
||||
NilValue nil_;
|
||||
};
|
||||
|
||||
|
||||
class HIsObjectAndBranch: public HUnaryControlInstruction {
|
||||
public:
|
||||
explicit HIsObjectAndBranch(HValue* value)
|
||||
|
@ -2317,46 +2317,6 @@ void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoIsNilAndBranch(LIsNilAndBranch* instr) {
|
||||
Register reg = ToRegister(instr->value());
|
||||
int false_block = chunk_->LookupDestination(instr->false_block_id());
|
||||
|
||||
// If the expression is known to be untagged or a smi, then it's definitely
|
||||
// not null, and it can't be a an undetectable object.
|
||||
if (instr->hydrogen()->representation().IsSpecialization() ||
|
||||
instr->hydrogen()->type().IsSmi()) {
|
||||
EmitGoto(false_block);
|
||||
return;
|
||||
}
|
||||
|
||||
int true_block = chunk_->LookupDestination(instr->true_block_id());
|
||||
Handle<Object> nil_value = instr->nil() == kNullValue ?
|
||||
factory()->null_value() :
|
||||
factory()->undefined_value();
|
||||
__ cmp(reg, nil_value);
|
||||
if (instr->kind() == kStrictEquality) {
|
||||
EmitBranch(true_block, false_block, equal);
|
||||
} else {
|
||||
Handle<Object> other_nil_value = instr->nil() == kNullValue ?
|
||||
factory()->undefined_value() :
|
||||
factory()->null_value();
|
||||
Label* true_label = chunk_->GetAssemblyLabel(true_block);
|
||||
Label* false_label = chunk_->GetAssemblyLabel(false_block);
|
||||
__ j(equal, true_label);
|
||||
__ cmp(reg, other_nil_value);
|
||||
__ j(equal, true_label);
|
||||
__ JumpIfSmi(reg, false_label);
|
||||
// Check for undetectable objects by looking in the bit field in
|
||||
// the map. The object has already been smi checked.
|
||||
Register scratch = ToRegister(instr->temp());
|
||||
__ mov(scratch, FieldOperand(reg, HeapObject::kMapOffset));
|
||||
__ movzx_b(scratch, FieldOperand(scratch, Map::kBitFieldOffset));
|
||||
__ test(scratch, Immediate(1 << Map::kIsUndetectable));
|
||||
EmitBranch(true_block, false_block, not_zero);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Condition LCodeGen::EmitIsObject(Register input,
|
||||
Register temp1,
|
||||
Label* is_not_object,
|
||||
|
@ -235,15 +235,6 @@ void LCmpIDAndBranch::PrintDataTo(StringStream* stream) {
|
||||
}
|
||||
|
||||
|
||||
void LIsNilAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if ");
|
||||
value()->PrintTo(stream);
|
||||
stream->Add(kind() == kStrictEquality ? " === " : " == ");
|
||||
stream->Add(nil() == kNullValue ? "null" : "undefined");
|
||||
stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
||||
}
|
||||
|
||||
|
||||
void LIsObjectAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if is_object(");
|
||||
value()->PrintTo(stream);
|
||||
@ -1733,13 +1724,6 @@ LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsNilAndBranch(HIsNilAndBranch* instr) {
|
||||
// We only need a temp register for non-strict compare.
|
||||
LOperand* temp = instr->kind() == kStrictEquality ? NULL : TempRegister();
|
||||
return new(zone()) LIsNilAndBranch(UseRegisterAtStart(instr->value()), temp);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
LOperand* temp = TempRegister();
|
||||
|
@ -108,7 +108,6 @@ class LCodeGen;
|
||||
V(Uint32ToDouble) \
|
||||
V(InvokeFunction) \
|
||||
V(IsConstructCallAndBranch) \
|
||||
V(IsNilAndBranch) \
|
||||
V(IsObjectAndBranch) \
|
||||
V(IsStringAndBranch) \
|
||||
V(IsSmiAndBranch) \
|
||||
@ -832,26 +831,6 @@ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
|
||||
};
|
||||
|
||||
|
||||
class LIsNilAndBranch: public LControlInstruction<1, 1> {
|
||||
public:
|
||||
LIsNilAndBranch(LOperand* value, LOperand* temp) {
|
||||
inputs_[0] = value;
|
||||
temps_[0] = temp;
|
||||
}
|
||||
|
||||
LOperand* value() { return inputs_[0]; }
|
||||
LOperand* temp() { return temps_[0]; }
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch")
|
||||
DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch)
|
||||
|
||||
EqualityKind kind() const { return hydrogen()->kind(); }
|
||||
NilValue nil() const { return hydrogen()->nil(); }
|
||||
|
||||
virtual void PrintDataTo(StringStream* stream);
|
||||
};
|
||||
|
||||
|
||||
class LIsObjectAndBranch: public LControlInstruction<1, 1> {
|
||||
public:
|
||||
LIsObjectAndBranch(LOperand* value, LOperand* temp) {
|
||||
|
@ -2033,48 +2033,6 @@ void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LCodeGen::DoIsNilAndBranch(LIsNilAndBranch* instr) {
|
||||
Register scratch = scratch0();
|
||||
Register reg = ToRegister(instr->value());
|
||||
int false_block = chunk_->LookupDestination(instr->false_block_id());
|
||||
|
||||
// If the expression is known to be untagged or a smi, then it's definitely
|
||||
// not null, and it can't be a an undetectable object.
|
||||
if (instr->hydrogen()->representation().IsSpecialization() ||
|
||||
instr->hydrogen()->type().IsSmi()) {
|
||||
EmitGoto(false_block);
|
||||
return;
|
||||
}
|
||||
|
||||
int true_block = chunk_->LookupDestination(instr->true_block_id());
|
||||
|
||||
Heap::RootListIndex nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kNullValueRootIndex :
|
||||
Heap::kUndefinedValueRootIndex;
|
||||
__ LoadRoot(at, nil_value);
|
||||
if (instr->kind() == kStrictEquality) {
|
||||
EmitBranch(true_block, false_block, eq, reg, Operand(at));
|
||||
} else {
|
||||
Heap::RootListIndex other_nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kUndefinedValueRootIndex :
|
||||
Heap::kNullValueRootIndex;
|
||||
Label* true_label = chunk_->GetAssemblyLabel(true_block);
|
||||
Label* false_label = chunk_->GetAssemblyLabel(false_block);
|
||||
__ Branch(USE_DELAY_SLOT, true_label, eq, reg, Operand(at));
|
||||
__ LoadRoot(at, other_nil_value); // In the delay slot.
|
||||
__ Branch(USE_DELAY_SLOT, true_label, eq, reg, Operand(at));
|
||||
__ JumpIfSmi(reg, false_label); // In the delay slot.
|
||||
// Check for undetectable objects by looking in the bit field in
|
||||
// the map. The object has already been smi checked.
|
||||
__ lw(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
||||
__ lbu(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset));
|
||||
__ And(scratch, scratch, 1 << Map::kIsUndetectable);
|
||||
EmitBranch(true_block, false_block, ne, scratch, Operand(zero_reg));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Condition LCodeGen::EmitIsObject(Register input,
|
||||
Register temp1,
|
||||
Register temp2,
|
||||
|
@ -217,15 +217,6 @@ void LCmpIDAndBranch::PrintDataTo(StringStream* stream) {
|
||||
}
|
||||
|
||||
|
||||
void LIsNilAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if ");
|
||||
value()->PrintTo(stream);
|
||||
stream->Add(kind() == kStrictEquality ? " === " : " == ");
|
||||
stream->Add(nil() == kNullValue ? "null" : "undefined");
|
||||
stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
||||
}
|
||||
|
||||
|
||||
void LIsObjectAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if is_object(");
|
||||
value()->PrintTo(stream);
|
||||
@ -1592,12 +1583,6 @@ LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsNilAndBranch(HIsNilAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
return new(zone()) LIsNilAndBranch(UseRegisterAtStart(instr->value()));
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
LOperand* temp = TempRegister();
|
||||
|
@ -113,7 +113,6 @@ class LCodeGen;
|
||||
V(Uint32ToDouble) \
|
||||
V(InvokeFunction) \
|
||||
V(IsConstructCallAndBranch) \
|
||||
V(IsNilAndBranch) \
|
||||
V(IsObjectAndBranch) \
|
||||
V(IsStringAndBranch) \
|
||||
V(IsSmiAndBranch) \
|
||||
@ -847,24 +846,6 @@ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
|
||||
};
|
||||
|
||||
|
||||
class LIsNilAndBranch: public LControlInstruction<1, 0> {
|
||||
public:
|
||||
explicit LIsNilAndBranch(LOperand* value) {
|
||||
inputs_[0] = value;
|
||||
}
|
||||
|
||||
LOperand* value() { return inputs_[0]; }
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch")
|
||||
DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch)
|
||||
|
||||
EqualityKind kind() const { return hydrogen()->kind(); }
|
||||
NilValue nil() const { return hydrogen()->nil(); }
|
||||
|
||||
virtual void PrintDataTo(StringStream* stream);
|
||||
};
|
||||
|
||||
|
||||
class LIsObjectAndBranch: public LControlInstruction<1, 1> {
|
||||
public:
|
||||
LIsObjectAndBranch(LOperand* value, LOperand* temp) {
|
||||
|
@ -2084,46 +2084,6 @@ void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoIsNilAndBranch(LIsNilAndBranch* instr) {
|
||||
Register reg = ToRegister(instr->value());
|
||||
int false_block = chunk_->LookupDestination(instr->false_block_id());
|
||||
|
||||
// If the expression is known to be untagged or a smi, then it's definitely
|
||||
// not null, and it can't be a an undetectable object.
|
||||
if (instr->hydrogen()->representation().IsSpecialization() ||
|
||||
instr->hydrogen()->type().IsSmi()) {
|
||||
EmitGoto(false_block);
|
||||
return;
|
||||
}
|
||||
|
||||
int true_block = chunk_->LookupDestination(instr->true_block_id());
|
||||
Heap::RootListIndex nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kNullValueRootIndex :
|
||||
Heap::kUndefinedValueRootIndex;
|
||||
__ CompareRoot(reg, nil_value);
|
||||
if (instr->kind() == kStrictEquality) {
|
||||
EmitBranch(true_block, false_block, equal);
|
||||
} else {
|
||||
Heap::RootListIndex other_nil_value = instr->nil() == kNullValue ?
|
||||
Heap::kUndefinedValueRootIndex :
|
||||
Heap::kNullValueRootIndex;
|
||||
Label* true_label = chunk_->GetAssemblyLabel(true_block);
|
||||
Label* false_label = chunk_->GetAssemblyLabel(false_block);
|
||||
__ j(equal, true_label);
|
||||
__ CompareRoot(reg, other_nil_value);
|
||||
__ j(equal, true_label);
|
||||
__ JumpIfSmi(reg, false_label);
|
||||
// Check for undetectable objects by looking in the bit field in
|
||||
// the map. The object has already been smi checked.
|
||||
Register scratch = ToRegister(instr->temp());
|
||||
__ movq(scratch, FieldOperand(reg, HeapObject::kMapOffset));
|
||||
__ testb(FieldOperand(scratch, Map::kBitFieldOffset),
|
||||
Immediate(1 << Map::kIsUndetectable));
|
||||
EmitBranch(true_block, false_block, not_zero);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Condition LCodeGen::EmitIsObject(Register input,
|
||||
Label* is_not_object,
|
||||
Label* is_object) {
|
||||
|
@ -219,15 +219,6 @@ void LCmpIDAndBranch::PrintDataTo(StringStream* stream) {
|
||||
}
|
||||
|
||||
|
||||
void LIsNilAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if ");
|
||||
value()->PrintTo(stream);
|
||||
stream->Add(kind() == kStrictEquality ? " === " : " == ");
|
||||
stream->Add(nil() == kNullValue ? "null" : "undefined");
|
||||
stream->Add(" then B%d else B%d", true_block_id(), false_block_id());
|
||||
}
|
||||
|
||||
|
||||
void LIsObjectAndBranch::PrintDataTo(StringStream* stream) {
|
||||
stream->Add("if is_object(");
|
||||
value()->PrintTo(stream);
|
||||
@ -1641,13 +1632,6 @@ LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsNilAndBranch(HIsNilAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
LOperand* temp = instr->kind() == kStrictEquality ? NULL : TempRegister();
|
||||
return new(zone()) LIsNilAndBranch(UseRegisterAtStart(instr->value()), temp);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
||||
ASSERT(instr->value()->representation().IsTagged());
|
||||
return new(zone()) LIsObjectAndBranch(UseRegisterAtStart(instr->value()));
|
||||
|
@ -114,7 +114,6 @@ class LCodeGen;
|
||||
V(Uint32ToDouble) \
|
||||
V(InvokeFunction) \
|
||||
V(IsConstructCallAndBranch) \
|
||||
V(IsNilAndBranch) \
|
||||
V(IsObjectAndBranch) \
|
||||
V(IsStringAndBranch) \
|
||||
V(IsSmiAndBranch) \
|
||||
@ -822,26 +821,6 @@ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
|
||||
};
|
||||
|
||||
|
||||
class LIsNilAndBranch: public LControlInstruction<1, 1> {
|
||||
public:
|
||||
LIsNilAndBranch(LOperand* value, LOperand* temp) {
|
||||
inputs_[0] = value;
|
||||
temps_[0] = temp;
|
||||
}
|
||||
|
||||
LOperand* value() { return inputs_[0]; }
|
||||
LOperand* temp() { return temps_[0]; }
|
||||
|
||||
DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch")
|
||||
DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch)
|
||||
|
||||
EqualityKind kind() const { return hydrogen()->kind(); }
|
||||
NilValue nil() const { return hydrogen()->nil(); }
|
||||
|
||||
virtual void PrintDataTo(StringStream* stream);
|
||||
};
|
||||
|
||||
|
||||
class LIsObjectAndBranch: public LControlInstruction<1, 0> {
|
||||
public:
|
||||
explicit LIsObjectAndBranch(LOperand* value) {
|
||||
|
Loading…
Reference in New Issue
Block a user