| Index: src/x64/lithium-x64.h
|
| diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h
|
| index cc7338261451e7f6d7f592542a3b2180dfdbdf60..46b5dffc8a57b62f596cedaa560346e75a76357c 100644
|
| --- a/src/x64/lithium-x64.h
|
| +++ b/src/x64/lithium-x64.h
|
| @@ -489,17 +489,46 @@ class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
|
| template<int I, int T>
|
| class LControlInstruction: public LTemplateInstruction<0, I, T> {
|
| public:
|
| + LControlInstruction() {
|
| + false_label_ = true_label_ = NULL;
|
| + }
|
| +
|
| virtual bool IsControl() const { return true; }
|
|
|
| int SuccessorCount() { return hydrogen()->SuccessorCount(); }
|
| HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
|
| - int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
|
| - int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
|
| +
|
| + int TrueDestination(LChunk* chunk) {
|
| + return chunk->LookupDestination(true_block_id());
|
| + }
|
| + int FalseDestination(LChunk* chunk) {
|
| + return chunk->LookupDestination(false_block_id());
|
| + }
|
| +
|
| + Label* TrueLabel(LChunk* chunk) {
|
| + if (true_label_ == NULL) {
|
| + true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
|
| + }
|
| + return true_label_;
|
| + }
|
| + Label* FalseLabel(LChunk* chunk) {
|
| + if (false_label_ == NULL) {
|
| + false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
|
| + }
|
| + return false_label_;
|
| + }
|
| +
|
| + protected:
|
| + int true_block_id() { return SuccessorAt(0)->block_id(); }
|
| + int false_block_id() { return SuccessorAt(1)->block_id(); }
|
|
|
| private:
|
| HControlInstruction* hydrogen() {
|
| return HControlInstruction::cast(this->hydrogen_value());
|
| }
|
| +
|
| + Label* false_label_;
|
| + Label* true_label_;
|
| };
|
|
|
|
|
| @@ -1190,7 +1219,7 @@ class LDebugBreak: public LTemplateInstruction<0, 0, 0> {
|
| };
|
|
|
|
|
| -class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
|
| +class LCmpMapAndBranch: public LControlInstruction<1, 0> {
|
| public:
|
| explicit LCmpMapAndBranch(LOperand* value) {
|
| inputs_[0] = value;
|
| @@ -1201,15 +1230,7 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
|
| DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
|
| DECLARE_HYDROGEN_ACCESSOR(CompareMap)
|
|
|
| - virtual bool IsControl() const { return true; }
|
| -
|
| Handle<Map> map() const { return hydrogen()->map(); }
|
| - int true_block_id() const {
|
| - return hydrogen()->FirstSuccessor()->block_id();
|
| - }
|
| - int false_block_id() const {
|
| - return hydrogen()->SecondSuccessor()->block_id();
|
| - }
|
| };
|
|
|
|
|
|
|