Index: src/x64/lithium-x64.h |
diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h |
index cbe7a3972c928302ed27d67db09fbfed055b7bb8..9d9ac1ea17c496d71bfc79f11ef87cef48686198 100644 |
--- a/src/x64/lithium-x64.h |
+++ b/src/x64/lithium-x64.h |
@@ -271,6 +271,10 @@ class LInstruction : public ZoneObject { |
virtual bool HasInterestingComment(LCodeGen* gen) const { return true; } |
+ virtual bool MustSignExtendResult(LPlatformChunk* chunk) const { |
+ return false; |
+ } |
+ |
#ifdef DEBUG |
void VerifyCall(); |
#endif |
@@ -306,6 +310,9 @@ class LTemplateResultInstruction : public LInstruction { |
void set_result(LOperand* operand) { results_[0] = operand; } |
LOperand* result() const { return results_[0]; } |
+ virtual bool MustSignExtendResult( |
+ LPlatformChunk* chunk) const V8_FINAL V8_OVERRIDE; |
+ |
protected: |
EmbeddedContainer<LOperand*, R> results_; |
}; |
@@ -2626,10 +2633,18 @@ class LChunkBuilder; |
class LPlatformChunk V8_FINAL : public LChunk { |
public: |
LPlatformChunk(CompilationInfo* info, HGraph* graph) |
- : LChunk(info, graph) { } |
+ : LChunk(info, graph), |
+ dehoisted_key_ids_(graph->GetMaximumValueID(), graph->zone()) { } |
int GetNextSpillIndex(RegisterKind kind); |
LOperand* GetNextSpillSlot(RegisterKind kind); |
+ BitVector* GetDehoistedKeyIds() { return &dehoisted_key_ids_; } |
+ bool IsDehoistedKey(HValue* value) { |
+ return dehoisted_key_ids_.Contains(value->id()); |
+ } |
+ |
+ private: |
+ BitVector dehoisted_key_ids_; |
}; |
@@ -2780,6 +2795,7 @@ class LChunkBuilder V8_FINAL : public LChunkBuilderBase { |
HArithmeticBinaryOperation* instr); |
LInstruction* DoArithmeticT(Token::Value op, |
HBinaryOperation* instr); |
+ void FindDehoistedKeyDefinitions(HValue* candidate); |
LPlatformChunk* chunk_; |
CompilationInfo* info_; |