| Index: src/x64/lithium-x64.cc
|
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
|
| index c058b0df44a44d3cbdf465f76752e4b76f53b7fb..a39810950dc1331571694b3a7beb7f799d893825 100644
|
| --- a/src/x64/lithium-x64.cc
|
| +++ b/src/x64/lithium-x64.cc
|
| @@ -263,6 +263,14 @@ void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) {
|
| }
|
|
|
|
|
| +void LStoreCodeEntry::PrintDataTo(StringStream* stream) {
|
| + stream->Add(" = ");
|
| + function()->PrintTo(stream);
|
| + stream->Add(".code_entry = ");
|
| + code_object()->PrintTo(stream);
|
| +}
|
| +
|
| +
|
| void LInnerAllocatedObject::PrintDataTo(StringStream* stream) {
|
| stream->Add(" = ");
|
| base_object()->PrintTo(stream);
|
| @@ -734,12 +742,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
|
| if (FLAG_opt_safe_uint32_operations) {
|
| does_deopt = !instr->CheckFlag(HInstruction::kUint32);
|
| } else {
|
| - for (HUseIterator it(instr->uses()); !it.Done(); it.Advance()) {
|
| - if (!it.value()->CheckFlag(HValue::kTruncatingToInt32)) {
|
| - does_deopt = true;
|
| - break;
|
| - }
|
| - }
|
| + does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
|
| }
|
| }
|
|
|
| @@ -1088,6 +1091,14 @@ LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoStoreCodeEntry(
|
| + HStoreCodeEntry* store_code_entry) {
|
| + LOperand* function = UseRegister(store_code_entry->function());
|
| + LOperand* code_object = UseTempRegister(store_code_entry->code_object());
|
| + return new(zone()) LStoreCodeEntry(function, code_object);
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoInnerAllocatedObject(
|
| HInnerAllocatedObject* inner_object) {
|
| LOperand* base_object = UseRegisterAtStart(inner_object->base_object());
|
| @@ -2379,6 +2390,8 @@ LInstruction* LChunkBuilder::DoArgumentsObject(HArgumentsObject* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCapturedObject(HCapturedObject* instr) {
|
| + instr->ReplayEnvironment(current_block_->last_environment());
|
| +
|
| // There are no real uses of a captured object.
|
| return NULL;
|
| }
|
| @@ -2425,20 +2438,7 @@ LInstruction* LChunkBuilder::DoIsConstructCallAndBranch(
|
|
|
|
|
| LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) {
|
| - HEnvironment* env = current_block_->last_environment();
|
| - ASSERT(env != NULL);
|
| -
|
| - env->set_ast_id(instr->ast_id());
|
| -
|
| - env->Drop(instr->pop_count());
|
| - for (int i = instr->values()->length() - 1; i >= 0; --i) {
|
| - HValue* value = instr->values()->at(i);
|
| - if (instr->HasAssignedIndexAt(i)) {
|
| - env->Bind(instr->GetAssignedIndexAt(i), value);
|
| - } else {
|
| - env->Push(value);
|
| - }
|
| - }
|
| + instr->ReplayEnvironment(current_block_->last_environment());
|
|
|
| // If there is an instruction pending deoptimization environment create a
|
| // lazy bailout instruction to capture the environment.
|
|
|