Commit 31813439 authored by bmeurer@chromium.org's avatar bmeurer@chromium.org

Turn HCompareHoleAndBranch into a HUnaryControlInstruction.

R=svenpanne@chromium.org

Review URL: https://codereview.chromium.org/24195009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16805 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 4db74648
......@@ -1756,8 +1756,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object());
return new(zone()) LCmpHoleAndBranch(object);
LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(value);
}
......
......@@ -2857,15 +2857,9 @@ void HCompareObjectEqAndBranch::PrintDataTo(StringStream* stream) {
}
void HCompareHoleAndBranch::PrintDataTo(StringStream* stream) {
object()->PrintNameTo(stream);
HControlInstruction::PrintDataTo(stream);
}
void HCompareHoleAndBranch::InferRepresentation(
HInferRepresentationPhase* h_infer) {
ChangeRepresentation(object()->representation());
ChangeRepresentation(value()->representation());
}
......
......@@ -4035,20 +4035,21 @@ class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> {
};
class HCompareHoleAndBranch V8_FINAL
: public HTemplateControlInstruction<2, 1> {
class HCompareHoleAndBranch V8_FINAL : public HUnaryControlInstruction {
public:
// TODO(danno): make this private when the IfBuilder properly constructs
// control flow instructions.
explicit HCompareHoleAndBranch(HValue* object) {
HCompareHoleAndBranch(HValue* value,
HBasicBlock* true_target = NULL,
HBasicBlock* false_target = NULL)
: HUnaryControlInstruction(value, true_target, false_target) {
SetFlag(kFlexibleRepresentation);
SetFlag(kAllowUndefinedAsNaN);
SetOperandAt(0, object);
}
DECLARE_INSTRUCTION_FACTORY_P1(HCompareHoleAndBranch, HValue*);
HValue* object() { return OperandAt(0); }
DECLARE_INSTRUCTION_FACTORY_P3(HCompareHoleAndBranch, HValue*,
HBasicBlock*, HBasicBlock*);
virtual void InferRepresentation(
HInferRepresentationPhase* h_infer) V8_OVERRIDE;
......@@ -4057,8 +4058,6 @@ class HCompareHoleAndBranch V8_FINAL
return representation();
}
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
DECLARE_CONCRETE_INSTRUCTION(CompareHoleAndBranch)
};
......
......@@ -1748,8 +1748,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object());
return new(zone()) LCmpHoleAndBranch(object);
LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(value);
}
......
......@@ -1647,8 +1647,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object());
return new(zone()) LCmpHoleAndBranch(object);
LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(value);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment