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

Side by Side Diff: test/compiler-unittests/instruction-selector-unittest.h

Issue 447563003: Add initial support for compiler unit tests using GTest/GMock. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef V8_COMPILER_UNITTESTS_INSTRUCTION_SELECTOR_UNITTEST_H_
6 #define V8_COMPILER_UNITTESTS_INSTRUCTION_SELECTOR_UNITTEST_H_
7
8 #include <deque>
9
10 #include "src/compiler/instruction-selector.h"
11 #include "src/compiler/raw-machine-assembler.h"
12 #include "test/compiler-unittests/compiler-unittests.h"
13
14 namespace v8 {
15 namespace internal {
16 namespace compiler {
17
18 class InstructionSelectorTest : public CompilerTest {
19 public:
20 InstructionSelectorTest() {}
21 virtual ~InstructionSelectorTest() {}
22
23 protected:
24 class Stream;
25
26 enum StreamBuilderMode { kAllInstructions, kTargetInstructions };
27
28 class StreamBuilder V8_FINAL : public RawMachineAssembler {
29 public:
30 StreamBuilder(InstructionSelectorTest* test,
31 MachineRepresentation return_type)
32 : RawMachineAssembler(new (test->zone()) Graph(test->zone()),
33 CallDescriptorBuilder(test->zone(), return_type)),
34 test_(test) {}
35 StreamBuilder(InstructionSelectorTest* test,
36 MachineRepresentation return_type,
37 MachineRepresentation parameter0_type)
38 : RawMachineAssembler(new (test->zone()) Graph(test->zone()),
39 CallDescriptorBuilder(test->zone(), return_type,
40 parameter0_type)),
41 test_(test) {}
42 StreamBuilder(InstructionSelectorTest* test,
43 MachineRepresentation return_type,
44 MachineRepresentation parameter0_type,
45 MachineRepresentation parameter1_type)
46 : RawMachineAssembler(
47 new (test->zone()) Graph(test->zone()),
48 CallDescriptorBuilder(test->zone(), return_type, parameter0_type,
49 parameter1_type)),
50 test_(test) {}
51
52 Stream Build(CpuFeature feature) {
53 return Build(InstructionSelector::Features(feature));
54 }
55 Stream Build(CpuFeature feature1, CpuFeature feature2) {
56 return Build(InstructionSelector::Features(feature1, feature2));
57 }
58 Stream Build(StreamBuilderMode mode = kTargetInstructions) {
59 return Build(InstructionSelector::Features(), mode);
60 }
61 Stream Build(InstructionSelector::Features features,
62 StreamBuilderMode mode = kTargetInstructions);
63
64 private:
65 MachineCallDescriptorBuilder* CallDescriptorBuilder(
66 Zone* zone, MachineRepresentation return_type) {
67 return new (zone) MachineCallDescriptorBuilder(return_type, 0, NULL);
68 }
69
70 MachineCallDescriptorBuilder* CallDescriptorBuilder(
71 Zone* zone, MachineRepresentation return_type,
72 MachineRepresentation parameter0_type) {
73 MachineRepresentation* parameter_types =
74 zone->NewArray<MachineRepresentation>(1);
75 parameter_types[0] = parameter0_type;
76 return new (zone)
77 MachineCallDescriptorBuilder(return_type, 1, parameter_types);
78 }
79
80 MachineCallDescriptorBuilder* CallDescriptorBuilder(
81 Zone* zone, MachineRepresentation return_type,
82 MachineRepresentation parameter0_type,
83 MachineRepresentation parameter1_type) {
84 MachineRepresentation* parameter_types =
85 zone->NewArray<MachineRepresentation>(2);
86 parameter_types[0] = parameter0_type;
87 parameter_types[1] = parameter1_type;
88 return new (zone)
89 MachineCallDescriptorBuilder(return_type, 2, parameter_types);
90 }
91
92 private:
93 InstructionSelectorTest* test_;
94 };
95
96 class Stream V8_FINAL {
97 public:
98 size_t size() const { return instructions_.size(); }
99 const Instruction* operator[](size_t index) const {
100 EXPECT_LT(index, size());
101 return instructions_[index];
102 }
103
104 int32_t ToInt32(const InstructionOperand* operand) const {
105 return ToConstant(operand).ToInt32();
106 }
107
108 private:
109 Constant ToConstant(const InstructionOperand* operand) const {
110 ConstantMap::const_iterator i;
111 if (operand->IsConstant()) {
112 i = constants_.find(operand->index());
113 EXPECT_NE(constants_.end(), i);
114 } else {
115 EXPECT_EQ(InstructionOperand::IMMEDIATE, operand->kind());
116 i = immediates_.find(operand->index());
117 EXPECT_NE(immediates_.end(), i);
118 }
119 EXPECT_EQ(operand->index(), i->first);
120 return i->second;
121 }
122
123 friend class StreamBuilder;
124
125 typedef std::map<int, Constant> ConstantMap;
126
127 ConstantMap constants_;
128 ConstantMap immediates_;
129 std::deque<Instruction*> instructions_;
130 };
131 };
132
133 } // namespace compiler
134 } // namespace internal
135 } // namespace v8
136
137 #endif // V8_COMPILER_UNITTESTS_INSTRUCTION_SELECTOR_UNITTEST_H_
OLDNEW
« no previous file with comments | « test/compiler-unittests/compiler-unittests.status ('k') | test/compiler-unittests/instruction-selector-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698