Index: src/interpreter/bytecode-array-builder.cc |
diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc |
index f2f5c07251e7dfa8fd3b1d9558efe25fa3c85f44..9cef1ecda5db34a21511484963bfd56002d74626 100644 |
--- a/src/interpreter/bytecode-array-builder.cc |
+++ b/src/interpreter/bytecode-array-builder.cc |
@@ -282,11 +282,23 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( |
Register reg) { |
// TODO(oth): Avoid storing the accumulator in the register if the |
// previous bytecode loaded the accumulator with the same register. |
+ // |
+ // TODO(oth): If the previous bytecode is a MOV into this register, |
+ // the previous instruction can be removed. The logic for determining |
+ // these redundant MOVs appears complex. |
Output(Bytecode::kStar, reg.ToOperand()); |
return *this; |
} |
+BytecodeArrayBuilder& BytecodeArrayBuilder::MoveRegister(Register from, |
+ Register to) { |
+ DCHECK(from != to); |
+ Output(Bytecode::kMov, from.ToOperand(), to.ToOperand()); |
+ return *this; |
+} |
+ |
+ |
BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal( |
size_t name_index, int feedback_slot, LanguageMode language_mode, |
TypeofMode typeof_mode) { |