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( ...@@ -1756,8 +1756,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch( LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) { HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object()); LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(object); return new(zone()) LCmpHoleAndBranch(value);
} }
......
...@@ -2857,15 +2857,9 @@ void HCompareObjectEqAndBranch::PrintDataTo(StringStream* stream) { ...@@ -2857,15 +2857,9 @@ void HCompareObjectEqAndBranch::PrintDataTo(StringStream* stream) {
} }
void HCompareHoleAndBranch::PrintDataTo(StringStream* stream) {
object()->PrintNameTo(stream);
HControlInstruction::PrintDataTo(stream);
}
void HCompareHoleAndBranch::InferRepresentation( void HCompareHoleAndBranch::InferRepresentation(
HInferRepresentationPhase* h_infer) { HInferRepresentationPhase* h_infer) {
ChangeRepresentation(object()->representation()); ChangeRepresentation(value()->representation());
} }
......
...@@ -4035,20 +4035,21 @@ class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { ...@@ -4035,20 +4035,21 @@ class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> {
}; };
class HCompareHoleAndBranch V8_FINAL class HCompareHoleAndBranch V8_FINAL : public HUnaryControlInstruction {
: public HTemplateControlInstruction<2, 1> {
public: public:
// TODO(danno): make this private when the IfBuilder properly constructs // TODO(danno): make this private when the IfBuilder properly constructs
// control flow instructions. // 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(kFlexibleRepresentation);
SetFlag(kAllowUndefinedAsNaN); SetFlag(kAllowUndefinedAsNaN);
SetOperandAt(0, object);
} }
DECLARE_INSTRUCTION_FACTORY_P1(HCompareHoleAndBranch, HValue*); DECLARE_INSTRUCTION_FACTORY_P1(HCompareHoleAndBranch, HValue*);
DECLARE_INSTRUCTION_FACTORY_P3(HCompareHoleAndBranch, HValue*,
HValue* object() { return OperandAt(0); } HBasicBlock*, HBasicBlock*);
virtual void InferRepresentation( virtual void InferRepresentation(
HInferRepresentationPhase* h_infer) V8_OVERRIDE; HInferRepresentationPhase* h_infer) V8_OVERRIDE;
...@@ -4057,8 +4058,6 @@ class HCompareHoleAndBranch V8_FINAL ...@@ -4057,8 +4058,6 @@ class HCompareHoleAndBranch V8_FINAL
return representation(); return representation();
} }
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
DECLARE_CONCRETE_INSTRUCTION(CompareHoleAndBranch) DECLARE_CONCRETE_INSTRUCTION(CompareHoleAndBranch)
}; };
......
...@@ -1748,8 +1748,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch( ...@@ -1748,8 +1748,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch( LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) { HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object()); LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(object); return new(zone()) LCmpHoleAndBranch(value);
} }
......
...@@ -1647,8 +1647,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch( ...@@ -1647,8 +1647,8 @@ LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
LInstruction* LChunkBuilder::DoCompareHoleAndBranch( LInstruction* LChunkBuilder::DoCompareHoleAndBranch(
HCompareHoleAndBranch* instr) { HCompareHoleAndBranch* instr) {
LOperand* object = UseRegisterAtStart(instr->object()); LOperand* value = UseRegisterAtStart(instr->value());
return new(zone()) LCmpHoleAndBranch(object); 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