| Index: src/x64/lithium-x64.h
|
| diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h
|
| index a58208c816f4f0471be89a44f6e6374b2bc0acdc..c77e4f13ace97c729255897fe5bda99003395a1e 100644
|
| --- a/src/x64/lithium-x64.h
|
| +++ b/src/x64/lithium-x64.h
|
| @@ -266,6 +266,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
|
| @@ -301,6 +305,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_;
|
| };
|
| @@ -2503,10 +2510,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_;
|
| };
|
|
|
|
|
| @@ -2651,6 +2666,7 @@ class LChunkBuilder V8_FINAL : public LChunkBuilderBase {
|
| HArithmeticBinaryOperation* instr);
|
| LInstruction* DoArithmeticT(Token::Value op,
|
| HBinaryOperation* instr);
|
| + void FindDehoistedKeyDefinitions(HValue* candidate);
|
|
|
| LPlatformChunk* chunk_;
|
| CompilationInfo* info_;
|
|
|