Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index eec86978ce4895df3dd74c6ca55e1fb88fa45c54..0a933dfd3eda581ff065880e4e23e187e6d38557 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -789,7 +789,6 @@ void Deoptimizer::DoComputeOutputFrames() { |
case Translation::DOUBLE_STACK_SLOT: |
case Translation::LITERAL: |
case Translation::ARGUMENTS_OBJECT: |
- case Translation::DUPLICATE: |
default: |
UNREACHABLE(); |
break; |
@@ -1725,14 +1724,8 @@ void Deoptimizer::DoTranslateObject(TranslationIterator* iterator, |
disasm::NameConverter converter; |
Address object_slot = deferred_objects_.last().slot_address(); |
- // Ignore commands marked as duplicate and act on the first non-duplicate. |
Translation::Opcode opcode = |
static_cast<Translation::Opcode>(iterator->Next()); |
- while (opcode == Translation::DUPLICATE) { |
- opcode = static_cast<Translation::Opcode>(iterator->Next()); |
- iterator->Skip(Translation::NumberOfOperandsFor(opcode)); |
- opcode = static_cast<Translation::Opcode>(iterator->Next()); |
- } |
switch (opcode) { |
case Translation::BEGIN: |
@@ -1743,7 +1736,6 @@ void Deoptimizer::DoTranslateObject(TranslationIterator* iterator, |
case Translation::SETTER_STUB_FRAME: |
case Translation::COMPILED_STUB_FRAME: |
case Translation::ARGUMENTS_OBJECT: |
- case Translation::DUPLICATE: |
UNREACHABLE(); |
return; |
@@ -1926,14 +1918,8 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator, |
const intptr_t kPlaceholder = reinterpret_cast<intptr_t>(Smi::FromInt(0)); |
bool is_native = value_type == TRANSLATED_VALUE_IS_NATIVE; |
- // Ignore commands marked as duplicate and act on the first non-duplicate. |
Translation::Opcode opcode = |
static_cast<Translation::Opcode>(iterator->Next()); |
- while (opcode == Translation::DUPLICATE) { |
- opcode = static_cast<Translation::Opcode>(iterator->Next()); |
- iterator->Skip(Translation::NumberOfOperandsFor(opcode)); |
- opcode = static_cast<Translation::Opcode>(iterator->Next()); |
- } |
switch (opcode) { |
case Translation::BEGIN: |
@@ -1943,7 +1929,6 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator, |
case Translation::GETTER_STUB_FRAME: |
case Translation::SETTER_STUB_FRAME: |
case Translation::COMPILED_STUB_FRAME: |
- case Translation::DUPLICATE: |
UNREACHABLE(); |
return; |
@@ -2197,10 +2182,6 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, |
Translation::Opcode opcode = |
static_cast<Translation::Opcode>(iterator->Next()); |
- bool duplicate = (opcode == Translation::DUPLICATE); |
- if (duplicate) { |
- opcode = static_cast<Translation::Opcode>(iterator->Next()); |
- } |
switch (opcode) { |
case Translation::BEGIN: |
@@ -2210,21 +2191,20 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, |
case Translation::GETTER_STUB_FRAME: |
case Translation::SETTER_STUB_FRAME: |
case Translation::COMPILED_STUB_FRAME: |
- case Translation::DUPLICATE: |
UNREACHABLE(); // Malformed input. |
- return false; |
- |
- case Translation::REGISTER: { |
- int output_reg = iterator->Next(); |
- if (FLAG_trace_osr) { |
- PrintF(" %s <- 0x%08" V8PRIxPTR " ; [sp + %d]\n", |
- converter.NameOfCPURegister(output_reg), |
- input_value, |
- *input_offset); |
- } |
- output->SetRegister(output_reg, input_value); |
- break; |
- } |
+ return false; |
+ |
+ case Translation::REGISTER: { |
+ int output_reg = iterator->Next(); |
+ if (FLAG_trace_osr) { |
+ PrintF(" %s <- 0x%08" V8PRIxPTR " ; [sp + %d]\n", |
+ converter.NameOfCPURegister(output_reg), |
+ input_value, |
+ *input_offset); |
+ } |
+ output->SetRegister(output_reg, input_value); |
+ break; |
+ } |
case Translation::INT32_REGISTER: { |
int32_t int32_value = 0; |
@@ -2369,7 +2349,7 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, |
} |
} |
- if (!duplicate) *input_offset -= kPointerSize; |
+ *input_offset -= kPointerSize; |
return true; |
} |
@@ -2823,15 +2803,18 @@ void Translation::StoreLiteral(int literal_id) { |
} |
-void Translation::MarkDuplicate() { |
- buffer_->Add(DUPLICATE, zone()); |
+void Translation::StoreArgumentsObject(bool args_known, |
+ int args_index, |
+ int args_length) { |
+ buffer_->Add(ARGUMENTS_OBJECT, zone()); |
+ buffer_->Add(args_known, zone()); |
+ buffer_->Add(args_index, zone()); |
+ buffer_->Add(args_length, zone()); |
} |
int Translation::NumberOfOperandsFor(Opcode opcode) { |
switch (opcode) { |
- case DUPLICATE: |
- return 0; |
case GETTER_STUB_FRAME: |
case SETTER_STUB_FRAME: |
case ARGUMENTS_OBJECT: |
@@ -2896,8 +2879,6 @@ const char* Translation::StringFor(Opcode opcode) { |
return "LITERAL"; |
case ARGUMENTS_OBJECT: |
return "ARGUMENTS_OBJECT"; |
- case DUPLICATE: |
- return "DUPLICATE"; |
} |
UNREACHABLE(); |
return ""; |
@@ -2949,7 +2930,6 @@ SlotRef SlotRef::ComputeSlotForNextArgument(TranslationIterator* iterator, |
case Translation::INT32_REGISTER: |
case Translation::UINT32_REGISTER: |
case Translation::DOUBLE_REGISTER: |
- case Translation::DUPLICATE: |
// We are at safepoint which corresponds to call. All registers are |
// saved by caller so there would be no live registers at this |
// point. Thus these translation commands should not be used. |