| Index: src/x64/lithium-x64.cc
|
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
|
| index 9815e874592b5925ae34fd3c104a042ff5b180c2..ddaae82022cef07d66f42448d2bc2219633d583f 100644
|
| --- a/src/x64/lithium-x64.cc
|
| +++ b/src/x64/lithium-x64.cc
|
| @@ -639,18 +639,12 @@ LInstruction* LChunkBuilder::MarkAsCall(LInstruction* instr,
|
| instr = AssignPointerMap(instr);
|
|
|
| if (hinstr->HasObservableSideEffects()) {
|
| + ASSERT(hinstr->next()->IsSimulate());
|
| + HSimulate* sim = HSimulate::cast(hinstr->next());
|
| ASSERT(instruction_pending_deoptimization_environment_ == NULL);
|
| ASSERT(pending_deoptimization_ast_id_.IsNone());
|
| - // For Control instructions we cannot verify the ast_id, since there is no
|
| - // 1:1 mapping but it corresponds to two simulates for each branch.
|
| - if (!hinstr->IsControlInstruction()) {
|
| - ASSERT(hinstr->next()->IsSimulate());
|
| - HSimulate* sim = HSimulate::cast(hinstr->next());
|
| - pending_deoptimization_ast_id_ = sim->ast_id();
|
| - } else {
|
| - pending_deoptimization_ast_id_ = BailoutId::PendingMarker();
|
| - }
|
| instruction_pending_deoptimization_environment_ = instr;
|
| + pending_deoptimization_ast_id_ = sim->ast_id();
|
| }
|
|
|
| // If instruction does not have side-effects lazy deoptimization
|
| @@ -1606,13 +1600,13 @@ LInstruction* LChunkBuilder::DoRandom(HRandom* instr) {
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DoCompareGenericAndBranch(
|
| - HCompareGenericAndBranch* instr) {
|
| +LInstruction* LChunkBuilder::DoCompareGeneric(HCompareGeneric* instr) {
|
| ASSERT(instr->left()->representation().IsTagged());
|
| ASSERT(instr->right()->representation().IsTagged());
|
| LOperand* left = UseFixed(instr->left(), rdx);
|
| LOperand* right = UseFixed(instr->right(), rax);
|
| - return MarkAsCall(new(zone()) LCompareGenericAndBranch(left, right), instr);
|
| + LCmpT* result = new(zone()) LCmpT(left, right);
|
| + return MarkAsCall(DefineFixed(result, rax), instr);
|
| }
|
|
|
|
|
| @@ -2440,9 +2434,7 @@ LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) {
|
|
|
| // If there is an instruction pending deoptimization environment create a
|
| // lazy bailout instruction to capture the environment.
|
| - if (!pending_deoptimization_ast_id_.IsNone()) {
|
| - ASSERT(pending_deoptimization_ast_id_ == instr->ast_id() ||
|
| - pending_deoptimization_ast_id_.IsPendingMarker());
|
| + if (pending_deoptimization_ast_id_ == instr->ast_id()) {
|
| LLazyBailout* lazy_bailout = new(zone()) LLazyBailout;
|
| LInstruction* result = AssignEnvironment(lazy_bailout);
|
| // Store the lazy deopt environment with the instruction if needed. Right
|
|
|