Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: src/compiler/instruction-selector.h

Issue 2398603002: [turbofan][x64] Improve code generation for external reference access. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler/instruction-selector.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_H_
6 #define V8_COMPILER_INSTRUCTION_SELECTOR_H_ 6 #define V8_COMPILER_INSTRUCTION_SELECTOR_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "src/compiler/common-operator.h" 10 #include "src/compiler/common-operator.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 }; 42 };
43 43
44 // Instruction selection generates an InstructionSequence for a given Schedule. 44 // Instruction selection generates an InstructionSequence for a given Schedule.
45 class InstructionSelector final { 45 class InstructionSelector final {
46 public: 46 public:
47 // Forward declarations. 47 // Forward declarations.
48 class Features; 48 class Features;
49 49
50 enum SourcePositionMode { kCallSourcePositions, kAllSourcePositions }; 50 enum SourcePositionMode { kCallSourcePositions, kAllSourcePositions };
51 enum EnableScheduling { kDisableScheduling, kEnableScheduling }; 51 enum EnableScheduling { kDisableScheduling, kEnableScheduling };
52 enum EnableSerialization { kDisableSerialization, kEnableSerialization };
52 53
53 InstructionSelector( 54 InstructionSelector(
54 Zone* zone, size_t node_count, Linkage* linkage, 55 Zone* zone, size_t node_count, Linkage* linkage,
55 InstructionSequence* sequence, Schedule* schedule, 56 InstructionSequence* sequence, Schedule* schedule,
56 SourcePositionTable* source_positions, Frame* frame, 57 SourcePositionTable* source_positions, Frame* frame,
57 SourcePositionMode source_position_mode = kCallSourcePositions, 58 SourcePositionMode source_position_mode = kCallSourcePositions,
58 Features features = SupportedFeatures(), 59 Features features = SupportedFeatures(),
59 EnableScheduling enable_scheduling = FLAG_turbo_instruction_scheduling 60 EnableScheduling enable_scheduling = FLAG_turbo_instruction_scheduling
60 ? kEnableScheduling 61 ? kEnableScheduling
61 : kDisableScheduling); 62 : kDisableScheduling,
63 EnableSerialization enable_serialization = kDisableSerialization);
62 64
63 // Visit code for the entire graph with the included schedule. 65 // Visit code for the entire graph with the included schedule.
64 bool SelectInstructions(); 66 bool SelectInstructions();
65 67
66 void StartBlock(RpoNumber rpo); 68 void StartBlock(RpoNumber rpo);
67 void EndBlock(RpoNumber rpo); 69 void EndBlock(RpoNumber rpo);
68 void AddInstruction(Instruction* instr); 70 void AddInstruction(Instruction* instr);
69 71
70 // =========================================================================== 72 // ===========================================================================
71 // ============= Architecture-independent code emission methods. ============= 73 // ============= Architecture-independent code emission methods. =============
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 193
192 // Checks if {node} is currently live. 194 // Checks if {node} is currently live.
193 bool IsLive(Node* node) const { return !IsDefined(node) && IsUsed(node); } 195 bool IsLive(Node* node) const { return !IsDefined(node) && IsUsed(node); }
194 196
195 // Gets the effect level of {node}. 197 // Gets the effect level of {node}.
196 int GetEffectLevel(Node* node) const; 198 int GetEffectLevel(Node* node) const;
197 199
198 int GetVirtualRegister(const Node* node); 200 int GetVirtualRegister(const Node* node);
199 const std::map<NodeId, int> GetVirtualRegistersForTesting() const; 201 const std::map<NodeId, int> GetVirtualRegistersForTesting() const;
200 202
203 // Check if we can generate loads and stores of ExternalConstants relative
204 // to the roots register, i.e. if both a root register is available for this
205 // compilation unit and the serializer is disabled.
206 bool CanAddressRelativeToRootsRegister() const;
207
201 Isolate* isolate() const { return sequence()->isolate(); } 208 Isolate* isolate() const { return sequence()->isolate(); }
202 209
203 private: 210 private:
204 friend class OperandGenerator; 211 friend class OperandGenerator;
205 212
206 bool UseInstructionScheduling() const { 213 bool UseInstructionScheduling() const {
207 return (enable_scheduling_ == kEnableScheduling) && 214 return (enable_scheduling_ == kEnableScheduling) &&
208 InstructionScheduler::SchedulerSupported(); 215 InstructionScheduler::SchedulerSupported();
209 } 216 }
210 217
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 Schedule* const schedule_; 355 Schedule* const schedule_;
349 BasicBlock* current_block_; 356 BasicBlock* current_block_;
350 ZoneVector<Instruction*> instructions_; 357 ZoneVector<Instruction*> instructions_;
351 BoolVector defined_; 358 BoolVector defined_;
352 BoolVector used_; 359 BoolVector used_;
353 IntVector effect_level_; 360 IntVector effect_level_;
354 IntVector virtual_registers_; 361 IntVector virtual_registers_;
355 IntVector virtual_register_rename_; 362 IntVector virtual_register_rename_;
356 InstructionScheduler* scheduler_; 363 InstructionScheduler* scheduler_;
357 EnableScheduling enable_scheduling_; 364 EnableScheduling enable_scheduling_;
365 EnableSerialization enable_serialization_;
358 Frame* frame_; 366 Frame* frame_;
359 bool instruction_selection_failed_; 367 bool instruction_selection_failed_;
360 }; 368 };
361 369
362 } // namespace compiler 370 } // namespace compiler
363 } // namespace internal 371 } // namespace internal
364 } // namespace v8 372 } // namespace v8
365 373
366 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_H_ 374 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/instruction-selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698