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

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

Issue 2416243002: Make unittests work in component build (Closed)
Patch Set: updates 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 | « src/compiler/graph-visualizer.h ('k') | src/compiler/instruction-codes.h » ('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_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_H_
6 #define V8_COMPILER_INSTRUCTION_H_ 6 #define V8_COMPILER_INSTRUCTION_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <iosfwd> 9 #include <iosfwd>
10 #include <map> 10 #include <map>
11 #include <set> 11 #include <set>
12 12
13 #include "src/base/compiler-specific.h"
13 #include "src/compiler/common-operator.h" 14 #include "src/compiler/common-operator.h"
14 #include "src/compiler/frame.h" 15 #include "src/compiler/frame.h"
15 #include "src/compiler/instruction-codes.h" 16 #include "src/compiler/instruction-codes.h"
16 #include "src/compiler/opcodes.h" 17 #include "src/compiler/opcodes.h"
17 #include "src/compiler/source-position.h" 18 #include "src/compiler/source-position.h"
19 #include "src/globals.h"
18 #include "src/macro-assembler.h" 20 #include "src/macro-assembler.h"
19 #include "src/register-configuration.h" 21 #include "src/register-configuration.h"
20 #include "src/zone/zone-allocator.h" 22 #include "src/zone/zone-allocator.h"
21 23
22 namespace v8 { 24 namespace v8 {
23 namespace internal { 25 namespace internal {
24 namespace compiler { 26 namespace compiler {
25 27
26 // Forward declarations. 28 // Forward declarations.
27 class Schedule; 29 class Schedule;
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 DCHECK(op.IsAnyLocationOperand()); 511 DCHECK(op.IsAnyLocationOperand());
510 return *static_cast<const LocationOperand*>(&op); 512 return *static_cast<const LocationOperand*>(&op);
511 } 513 }
512 514
513 STATIC_ASSERT(KindField::kSize == 3); 515 STATIC_ASSERT(KindField::kSize == 3);
514 class LocationKindField : public BitField64<LocationKind, 3, 2> {}; 516 class LocationKindField : public BitField64<LocationKind, 3, 2> {};
515 class RepresentationField : public BitField64<MachineRepresentation, 5, 8> {}; 517 class RepresentationField : public BitField64<MachineRepresentation, 5, 8> {};
516 class IndexField : public BitField64<int32_t, 35, 29> {}; 518 class IndexField : public BitField64<int32_t, 35, 29> {};
517 }; 519 };
518 520
519 521 class V8_EXPORT_PRIVATE ExplicitOperand
520 class ExplicitOperand : public LocationOperand { 522 : public NON_EXPORTED_BASE(LocationOperand) {
521 public: 523 public:
522 ExplicitOperand(LocationKind kind, MachineRepresentation rep, int index); 524 ExplicitOperand(LocationKind kind, MachineRepresentation rep, int index);
523 525
524 static ExplicitOperand* New(Zone* zone, LocationKind kind, 526 static ExplicitOperand* New(Zone* zone, LocationKind kind,
525 MachineRepresentation rep, int index) { 527 MachineRepresentation rep, int index) {
526 return InstructionOperand::New(zone, ExplicitOperand(kind, rep, index)); 528 return InstructionOperand::New(zone, ExplicitOperand(kind, rep, index));
527 } 529 }
528 530
529 INSTRUCTION_OPERAND_CASTS(ExplicitOperand, EXPLICIT); 531 INSTRUCTION_OPERAND_CASTS(ExplicitOperand, EXPLICIT);
530 }; 532 };
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 friend std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm); 787 friend std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm);
786 788
787 ZoneVector<InstructionOperand> reference_operands_; 789 ZoneVector<InstructionOperand> reference_operands_;
788 int instruction_position_; 790 int instruction_position_;
789 }; 791 };
790 792
791 std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm); 793 std::ostream& operator<<(std::ostream& os, const ReferenceMap& pm);
792 794
793 class InstructionBlock; 795 class InstructionBlock;
794 796
795 class Instruction final { 797 class V8_EXPORT_PRIVATE Instruction final {
796 public: 798 public:
797 size_t OutputCount() const { return OutputCountField::decode(bit_field_); } 799 size_t OutputCount() const { return OutputCountField::decode(bit_field_); }
798 const InstructionOperand* OutputAt(size_t i) const { 800 const InstructionOperand* OutputAt(size_t i) const {
799 DCHECK(i < OutputCount()); 801 DCHECK(i < OutputCount());
800 return &operands_[i]; 802 return &operands_[i];
801 } 803 }
802 InstructionOperand* OutputAt(size_t i) { 804 InstructionOperand* OutputAt(size_t i) {
803 DCHECK(i < OutputCount()); 805 DCHECK(i < OutputCount());
804 return &operands_[i]; 806 return &operands_[i];
805 } 807 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 bool operator>=(RpoNumber other) const { return index_ >= other.index_; } 1014 bool operator>=(RpoNumber other) const { return index_ >= other.index_; }
1013 1015
1014 private: 1016 private:
1015 explicit RpoNumber(int32_t index) : index_(index) {} 1017 explicit RpoNumber(int32_t index) : index_(index) {}
1016 int32_t index_; 1018 int32_t index_;
1017 }; 1019 };
1018 1020
1019 1021
1020 std::ostream& operator<<(std::ostream&, const RpoNumber&); 1022 std::ostream& operator<<(std::ostream&, const RpoNumber&);
1021 1023
1022 1024 class V8_EXPORT_PRIVATE Constant final {
1023 class Constant final {
1024 public: 1025 public:
1025 enum Type { 1026 enum Type {
1026 kInt32, 1027 kInt32,
1027 kInt64, 1028 kInt64,
1028 kFloat32, 1029 kFloat32,
1029 kFloat64, 1030 kFloat64,
1030 kExternalReference, 1031 kExternalReference,
1031 kHeapObject, 1032 kHeapObject,
1032 kRpoNumber 1033 kRpoNumber
1033 }; 1034 };
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 FrameStateDescriptor* descriptor() const { return descriptor_; } 1205 FrameStateDescriptor* descriptor() const { return descriptor_; }
1205 DeoptimizeReason reason() const { return reason_; } 1206 DeoptimizeReason reason() const { return reason_; }
1206 1207
1207 private: 1208 private:
1208 FrameStateDescriptor* descriptor_ = nullptr; 1209 FrameStateDescriptor* descriptor_ = nullptr;
1209 DeoptimizeReason reason_ = DeoptimizeReason::kNoReason; 1210 DeoptimizeReason reason_ = DeoptimizeReason::kNoReason;
1210 }; 1211 };
1211 1212
1212 typedef ZoneVector<DeoptimizationEntry> DeoptimizationVector; 1213 typedef ZoneVector<DeoptimizationEntry> DeoptimizationVector;
1213 1214
1214 class PhiInstruction final : public ZoneObject { 1215 class V8_EXPORT_PRIVATE PhiInstruction final
1216 : public NON_EXPORTED_BASE(ZoneObject) {
1215 public: 1217 public:
1216 typedef ZoneVector<InstructionOperand> Inputs; 1218 typedef ZoneVector<InstructionOperand> Inputs;
1217 1219
1218 PhiInstruction(Zone* zone, int virtual_register, size_t input_count); 1220 PhiInstruction(Zone* zone, int virtual_register, size_t input_count);
1219 1221
1220 void SetInput(size_t offset, int virtual_register); 1222 void SetInput(size_t offset, int virtual_register);
1221 void RenameInput(size_t offset, int virtual_register); 1223 void RenameInput(size_t offset, int virtual_register);
1222 1224
1223 int virtual_register() const { return virtual_register_; } 1225 int virtual_register() const { return virtual_register_; }
1224 const IntVector& operands() const { return operands_; } 1226 const IntVector& operands() const { return operands_; }
1225 1227
1226 // TODO(dcarney): this has no real business being here, since it's internal to 1228 // TODO(dcarney): this has no real business being here, since it's internal to
1227 // the register allocator, but putting it here was convenient. 1229 // the register allocator, but putting it here was convenient.
1228 const InstructionOperand& output() const { return output_; } 1230 const InstructionOperand& output() const { return output_; }
1229 InstructionOperand& output() { return output_; } 1231 InstructionOperand& output() { return output_; }
1230 1232
1231 private: 1233 private:
1232 const int virtual_register_; 1234 const int virtual_register_;
1233 InstructionOperand output_; 1235 InstructionOperand output_;
1234 IntVector operands_; 1236 IntVector operands_;
1235 }; 1237 };
1236 1238
1237 1239
1238 // Analogue of BasicBlock for Instructions instead of Nodes. 1240 // Analogue of BasicBlock for Instructions instead of Nodes.
1239 class InstructionBlock final : public ZoneObject { 1241 class V8_EXPORT_PRIVATE InstructionBlock final
1242 : public NON_EXPORTED_BASE(ZoneObject) {
1240 public: 1243 public:
1241 InstructionBlock(Zone* zone, RpoNumber rpo_number, RpoNumber loop_header, 1244 InstructionBlock(Zone* zone, RpoNumber rpo_number, RpoNumber loop_header,
1242 RpoNumber loop_end, bool deferred, bool handler); 1245 RpoNumber loop_end, bool deferred, bool handler);
1243 1246
1244 // Instruction indexes (used by the register allocator). 1247 // Instruction indexes (used by the register allocator).
1245 int first_instruction_index() const { 1248 int first_instruction_index() const {
1246 DCHECK(code_start_ >= 0); 1249 DCHECK(code_start_ >= 0);
1247 DCHECK(code_end_ > 0); 1250 DCHECK(code_end_ > 0);
1248 DCHECK(code_end_ >= code_start_); 1251 DCHECK(code_end_ >= code_start_);
1249 return code_start_; 1252 return code_start_;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 typedef ZoneDeque<ReferenceMap*> ReferenceMapDeque; 1339 typedef ZoneDeque<ReferenceMap*> ReferenceMapDeque;
1337 typedef ZoneVector<InstructionBlock*> InstructionBlocks; 1340 typedef ZoneVector<InstructionBlock*> InstructionBlocks;
1338 1341
1339 1342
1340 // Forward declarations. 1343 // Forward declarations.
1341 struct PrintableInstructionSequence; 1344 struct PrintableInstructionSequence;
1342 1345
1343 1346
1344 // Represents architecture-specific generated code before, during, and after 1347 // Represents architecture-specific generated code before, during, and after
1345 // register allocation. 1348 // register allocation.
1346 class InstructionSequence final : public ZoneObject { 1349 class V8_EXPORT_PRIVATE InstructionSequence final
1350 : public NON_EXPORTED_BASE(ZoneObject) {
1347 public: 1351 public:
1348 static InstructionBlocks* InstructionBlocksFor(Zone* zone, 1352 static InstructionBlocks* InstructionBlocksFor(Zone* zone,
1349 const Schedule* schedule); 1353 const Schedule* schedule);
1350 // Puts the deferred blocks last. 1354 // Puts the deferred blocks last.
1351 static void ComputeAssemblyOrder(InstructionBlocks* blocks); 1355 static void ComputeAssemblyOrder(InstructionBlocks* blocks);
1352 1356
1353 InstructionSequence(Isolate* isolate, Zone* zone, 1357 InstructionSequence(Isolate* isolate, Zone* zone,
1354 InstructionBlocks* instruction_blocks); 1358 InstructionBlocks* instruction_blocks);
1355 1359
1356 int NextVirtualRegister(); 1360 int NextVirtualRegister();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 1498
1495 void PrintBlock(const RegisterConfiguration* config, int block_id) const; 1499 void PrintBlock(const RegisterConfiguration* config, int block_id) const;
1496 void PrintBlock(int block_id) const; 1500 void PrintBlock(int block_id) const;
1497 1501
1498 void ValidateEdgeSplitForm() const; 1502 void ValidateEdgeSplitForm() const;
1499 void ValidateDeferredBlockExitPaths() const; 1503 void ValidateDeferredBlockExitPaths() const;
1500 void ValidateDeferredBlockEntryPaths() const; 1504 void ValidateDeferredBlockEntryPaths() const;
1501 void ValidateSSA() const; 1505 void ValidateSSA() const;
1502 1506
1503 private: 1507 private:
1504 friend std::ostream& operator<<(std::ostream& os, 1508 friend V8_EXPORT_PRIVATE std::ostream& operator<<(
1505 const PrintableInstructionSequence& code); 1509 std::ostream& os, const PrintableInstructionSequence& code);
1506 1510
1507 typedef ZoneMap<const Instruction*, SourcePosition> SourcePositionMap; 1511 typedef ZoneMap<const Instruction*, SourcePosition> SourcePositionMap;
1508 1512
1509 Isolate* isolate_; 1513 Isolate* isolate_;
1510 Zone* const zone_; 1514 Zone* const zone_;
1511 InstructionBlocks* const instruction_blocks_; 1515 InstructionBlocks* const instruction_blocks_;
1512 SourcePositionMap source_positions_; 1516 SourcePositionMap source_positions_;
1513 ConstantMap constants_; 1517 ConstantMap constants_;
1514 Immediates immediates_; 1518 Immediates immediates_;
1515 InstructionDeque instructions_; 1519 InstructionDeque instructions_;
1516 int next_virtual_register_; 1520 int next_virtual_register_;
1517 ReferenceMapDeque reference_maps_; 1521 ReferenceMapDeque reference_maps_;
1518 ZoneVector<MachineRepresentation> representations_; 1522 ZoneVector<MachineRepresentation> representations_;
1519 DeoptimizationVector deoptimization_entries_; 1523 DeoptimizationVector deoptimization_entries_;
1520 1524
1521 // Used at construction time 1525 // Used at construction time
1522 InstructionBlock* current_block_; 1526 InstructionBlock* current_block_;
1523 1527
1524 DISALLOW_COPY_AND_ASSIGN(InstructionSequence); 1528 DISALLOW_COPY_AND_ASSIGN(InstructionSequence);
1525 }; 1529 };
1526 1530
1527 1531
1528 struct PrintableInstructionSequence { 1532 struct PrintableInstructionSequence {
1529 const RegisterConfiguration* register_configuration_; 1533 const RegisterConfiguration* register_configuration_;
1530 const InstructionSequence* sequence_; 1534 const InstructionSequence* sequence_;
1531 }; 1535 };
1532 1536
1533 1537 V8_EXPORT_PRIVATE std::ostream& operator<<(
1534 std::ostream& operator<<(std::ostream& os, 1538 std::ostream& os, const PrintableInstructionSequence& code);
1535 const PrintableInstructionSequence& code);
1536 1539
1537 } // namespace compiler 1540 } // namespace compiler
1538 } // namespace internal 1541 } // namespace internal
1539 } // namespace v8 1542 } // namespace v8
1540 1543
1541 #endif // V8_COMPILER_INSTRUCTION_H_ 1544 #endif // V8_COMPILER_INSTRUCTION_H_
OLDNEW
« no previous file with comments | « src/compiler/graph-visualizer.h ('k') | src/compiler/instruction-codes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698