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: test/cctest/compiler/test-instruction.cc

Issue 646393002: [turbofan] remove some of the dependency of Instruction on Schedule (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « src/zone-containers.h ('k') | no next file » | 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 #include "src/v8.h" 5 #include "src/v8.h"
6 #include "test/cctest/cctest.h" 6 #include "test/cctest/cctest.h"
7 7
8 #include "src/compiler/code-generator.h" 8 #include "src/compiler/code-generator.h"
9 #include "src/compiler/common-operator.h" 9 #include "src/compiler/common-operator.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 schedule.AddNode(schedule.start(), node); 74 schedule.AddNode(schedule.start(), node);
75 return node; 75 return node;
76 } 76 }
77 77
78 Node* NewNode(BasicBlock* block) { 78 Node* NewNode(BasicBlock* block) {
79 Node* node = graph.NewNode(common.Int32Constant(111)); 79 Node* node = graph.NewNode(common.Int32Constant(111));
80 schedule.AddNode(block, node); 80 schedule.AddNode(block, node);
81 return node; 81 return node;
82 } 82 }
83 83
84 int NewInstr(BasicBlock* block) { 84 int NewInstr() {
85 InstructionCode opcode = static_cast<InstructionCode>(110); 85 InstructionCode opcode = static_cast<InstructionCode>(110);
86 TestInstr* instr = TestInstr::New(zone(), opcode); 86 TestInstr* instr = TestInstr::New(zone(), opcode);
87 return code->AddInstruction(instr, block); 87 return code->AddInstruction(instr);
88 } 88 }
89 89
90 UnallocatedOperand* NewUnallocated(int vreg) { 90 UnallocatedOperand* NewUnallocated(int vreg) {
91 UnallocatedOperand* unallocated = 91 UnallocatedOperand* unallocated =
92 new (zone()) UnallocatedOperand(UnallocatedOperand::ANY); 92 new (zone()) UnallocatedOperand(UnallocatedOperand::ANY);
93 unallocated->set_virtual_register(vreg); 93 unallocated->set_virtual_register(vreg);
94 return unallocated; 94 return unallocated;
95 } 95 }
96 }; 96 };
97 97
(...skipping 17 matching lines...) Expand all
115 CHECK_EQ(R.graph.NodeCount(), R.code->node_count()); 115 CHECK_EQ(R.graph.NodeCount(), R.code->node_count());
116 116
117 BasicBlockVector* blocks = R.schedule.rpo_order(); 117 BasicBlockVector* blocks = R.schedule.rpo_order();
118 CHECK_EQ(static_cast<int>(blocks->size()), R.code->BasicBlockCount()); 118 CHECK_EQ(static_cast<int>(blocks->size()), R.code->BasicBlockCount());
119 119
120 int index = 0; 120 int index = 0;
121 for (BasicBlockVectorIter i = blocks->begin(); i != blocks->end(); 121 for (BasicBlockVectorIter i = blocks->begin(); i != blocks->end();
122 i++, index++) { 122 i++, index++) {
123 BasicBlock* block = *i; 123 BasicBlock* block = *i;
124 CHECK_EQ(block, R.code->BlockAt(index)); 124 CHECK_EQ(block, R.code->BlockAt(index));
125 CHECK_EQ(-1, R.code->GetLoopEnd(block)); 125 CHECK_EQ(-1, block->loop_end());
126 } 126 }
127 } 127 }
128 128
129 129
130 TEST(InstructionGetBasicBlock) { 130 TEST(InstructionGetBasicBlock) {
131 InstructionTester R; 131 InstructionTester R;
132 132
133 BasicBlock* b0 = R.schedule.start(); 133 BasicBlock* b0 = R.schedule.start();
134 BasicBlock* b1 = R.schedule.NewBasicBlock(); 134 BasicBlock* b1 = R.schedule.NewBasicBlock();
135 BasicBlock* b2 = R.schedule.NewBasicBlock(); 135 BasicBlock* b2 = R.schedule.NewBasicBlock();
136 BasicBlock* b3 = R.schedule.end(); 136 BasicBlock* b3 = R.schedule.end();
137 137
138 R.schedule.AddGoto(b0, b1); 138 R.schedule.AddGoto(b0, b1);
139 R.schedule.AddGoto(b1, b2); 139 R.schedule.AddGoto(b1, b2);
140 R.schedule.AddGoto(b2, b3); 140 R.schedule.AddGoto(b2, b3);
141 141
142 R.allocCode(); 142 R.allocCode();
143 143
144 R.code->StartBlock(b0); 144 R.code->StartBlock(b0);
145 int i0 = R.NewInstr(b0); 145 int i0 = R.NewInstr();
146 int i1 = R.NewInstr(b0); 146 int i1 = R.NewInstr();
147 R.code->EndBlock(b0); 147 R.code->EndBlock(b0);
148 R.code->StartBlock(b1); 148 R.code->StartBlock(b1);
149 int i2 = R.NewInstr(b1); 149 int i2 = R.NewInstr();
150 int i3 = R.NewInstr(b1); 150 int i3 = R.NewInstr();
151 int i4 = R.NewInstr(b1); 151 int i4 = R.NewInstr();
152 int i5 = R.NewInstr(b1); 152 int i5 = R.NewInstr();
153 R.code->EndBlock(b1); 153 R.code->EndBlock(b1);
154 R.code->StartBlock(b2); 154 R.code->StartBlock(b2);
155 int i6 = R.NewInstr(b2); 155 int i6 = R.NewInstr();
156 int i7 = R.NewInstr(b2); 156 int i7 = R.NewInstr();
157 int i8 = R.NewInstr(b2); 157 int i8 = R.NewInstr();
158 R.code->EndBlock(b2); 158 R.code->EndBlock(b2);
159 R.code->StartBlock(b3); 159 R.code->StartBlock(b3);
160 R.code->EndBlock(b3); 160 R.code->EndBlock(b3);
161 161
162 CHECK_EQ(b0, R.code->GetBasicBlock(i0)); 162 CHECK_EQ(b0, R.code->GetBasicBlock(i0));
163 CHECK_EQ(b0, R.code->GetBasicBlock(i1)); 163 CHECK_EQ(b0, R.code->GetBasicBlock(i1));
164 164
165 CHECK_EQ(b1, R.code->GetBasicBlock(i2)); 165 CHECK_EQ(b1, R.code->GetBasicBlock(i2));
166 CHECK_EQ(b1, R.code->GetBasicBlock(i3)); 166 CHECK_EQ(b1, R.code->GetBasicBlock(i3));
167 CHECK_EQ(b1, R.code->GetBasicBlock(i4)); 167 CHECK_EQ(b1, R.code->GetBasicBlock(i4));
168 CHECK_EQ(b1, R.code->GetBasicBlock(i5)); 168 CHECK_EQ(b1, R.code->GetBasicBlock(i5));
169 169
170 CHECK_EQ(b2, R.code->GetBasicBlock(i6)); 170 CHECK_EQ(b2, R.code->GetBasicBlock(i6));
171 CHECK_EQ(b2, R.code->GetBasicBlock(i7)); 171 CHECK_EQ(b2, R.code->GetBasicBlock(i7));
172 CHECK_EQ(b2, R.code->GetBasicBlock(i8)); 172 CHECK_EQ(b2, R.code->GetBasicBlock(i8));
173 173
174 CHECK_EQ(b0, R.code->GetBasicBlock(b0->first_instruction_index())); 174 CHECK_EQ(b0, R.code->GetBasicBlock(R.code->first_instruction_index(b0)));
175 CHECK_EQ(b0, R.code->GetBasicBlock(b0->last_instruction_index())); 175 CHECK_EQ(b0, R.code->GetBasicBlock(R.code->last_instruction_index(b0)));
176 176
177 CHECK_EQ(b1, R.code->GetBasicBlock(b1->first_instruction_index())); 177 CHECK_EQ(b1, R.code->GetBasicBlock(R.code->first_instruction_index(b1)));
178 CHECK_EQ(b1, R.code->GetBasicBlock(b1->last_instruction_index())); 178 CHECK_EQ(b1, R.code->GetBasicBlock(R.code->last_instruction_index(b1)));
179 179
180 CHECK_EQ(b2, R.code->GetBasicBlock(b2->first_instruction_index())); 180 CHECK_EQ(b2, R.code->GetBasicBlock(R.code->first_instruction_index(b2)));
181 CHECK_EQ(b2, R.code->GetBasicBlock(b2->last_instruction_index())); 181 CHECK_EQ(b2, R.code->GetBasicBlock(R.code->last_instruction_index(b2)));
182 182
183 CHECK_EQ(b3, R.code->GetBasicBlock(b3->first_instruction_index())); 183 CHECK_EQ(b3, R.code->GetBasicBlock(R.code->first_instruction_index(b3)));
184 CHECK_EQ(b3, R.code->GetBasicBlock(b3->last_instruction_index())); 184 CHECK_EQ(b3, R.code->GetBasicBlock(R.code->last_instruction_index(b3)));
185 } 185 }
186 186
187 187
188 TEST(InstructionIsGapAt) { 188 TEST(InstructionIsGapAt) {
189 InstructionTester R; 189 InstructionTester R;
190 190
191 BasicBlock* b0 = R.schedule.start(); 191 BasicBlock* b0 = R.schedule.start();
192 R.schedule.AddReturn(b0, R.Int32Constant(1)); 192 R.schedule.AddReturn(b0, R.Int32Constant(1));
193 193
194 R.allocCode(); 194 R.allocCode();
195 TestInstr* i0 = TestInstr::New(R.zone(), 100); 195 TestInstr* i0 = TestInstr::New(R.zone(), 100);
196 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); 196 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
197 R.code->StartBlock(b0); 197 R.code->StartBlock(b0);
198 R.code->AddInstruction(i0, b0); 198 R.code->AddInstruction(i0);
199 R.code->AddInstruction(g, b0); 199 R.code->AddInstruction(g);
200 R.code->EndBlock(b0); 200 R.code->EndBlock(b0);
201 201
202 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); 202 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
203 203
204 CHECK_EQ(true, R.code->IsGapAt(0)); // Label 204 CHECK_EQ(true, R.code->IsGapAt(0)); // Label
205 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap 205 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
206 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 206 CHECK_EQ(false, R.code->IsGapAt(2)); // i0
207 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap 207 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
208 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap 208 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
209 CHECK_EQ(false, R.code->IsGapAt(5)); // g 209 CHECK_EQ(false, R.code->IsGapAt(5)); // g
210 } 210 }
211 211
212 212
213 TEST(InstructionIsGapAt2) { 213 TEST(InstructionIsGapAt2) {
214 InstructionTester R; 214 InstructionTester R;
215 215
216 BasicBlock* b0 = R.schedule.start(); 216 BasicBlock* b0 = R.schedule.start();
217 BasicBlock* b1 = R.schedule.end(); 217 BasicBlock* b1 = R.schedule.end();
218 R.schedule.AddGoto(b0, b1); 218 R.schedule.AddGoto(b0, b1);
219 R.schedule.AddReturn(b1, R.Int32Constant(1)); 219 R.schedule.AddReturn(b1, R.Int32Constant(1));
220 220
221 R.allocCode(); 221 R.allocCode();
222 TestInstr* i0 = TestInstr::New(R.zone(), 100); 222 TestInstr* i0 = TestInstr::New(R.zone(), 100);
223 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); 223 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
224 R.code->StartBlock(b0); 224 R.code->StartBlock(b0);
225 R.code->AddInstruction(i0, b0); 225 R.code->AddInstruction(i0);
226 R.code->AddInstruction(g, b0); 226 R.code->AddInstruction(g);
227 R.code->EndBlock(b0); 227 R.code->EndBlock(b0);
228 228
229 TestInstr* i1 = TestInstr::New(R.zone(), 102); 229 TestInstr* i1 = TestInstr::New(R.zone(), 102);
230 TestInstr* g1 = TestInstr::New(R.zone(), 104)->MarkAsControl(); 230 TestInstr* g1 = TestInstr::New(R.zone(), 104)->MarkAsControl();
231 R.code->StartBlock(b1); 231 R.code->StartBlock(b1);
232 R.code->AddInstruction(i1, b1); 232 R.code->AddInstruction(i1);
233 R.code->AddInstruction(g1, b1); 233 R.code->AddInstruction(g1);
234 R.code->EndBlock(b1); 234 R.code->EndBlock(b1);
235 235
236 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); 236 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
237 237
238 CHECK_EQ(true, R.code->IsGapAt(0)); // Label 238 CHECK_EQ(true, R.code->IsGapAt(0)); // Label
239 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap 239 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
240 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 240 CHECK_EQ(false, R.code->IsGapAt(2)); // i0
241 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap 241 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
242 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap 242 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
243 CHECK_EQ(false, R.code->IsGapAt(5)); // g 243 CHECK_EQ(false, R.code->IsGapAt(5)); // g
(...skipping 12 matching lines...) Expand all
256 TEST(InstructionAddGapMove) { 256 TEST(InstructionAddGapMove) {
257 InstructionTester R; 257 InstructionTester R;
258 258
259 BasicBlock* b0 = R.schedule.start(); 259 BasicBlock* b0 = R.schedule.start();
260 R.schedule.AddReturn(b0, R.Int32Constant(1)); 260 R.schedule.AddReturn(b0, R.Int32Constant(1));
261 261
262 R.allocCode(); 262 R.allocCode();
263 TestInstr* i0 = TestInstr::New(R.zone(), 100); 263 TestInstr* i0 = TestInstr::New(R.zone(), 100);
264 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); 264 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
265 R.code->StartBlock(b0); 265 R.code->StartBlock(b0);
266 R.code->AddInstruction(i0, b0); 266 R.code->AddInstruction(i0);
267 R.code->AddInstruction(g, b0); 267 R.code->AddInstruction(g);
268 R.code->EndBlock(b0); 268 R.code->EndBlock(b0);
269 269
270 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); 270 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
271 271
272 CHECK_EQ(true, R.code->IsGapAt(0)); // Label 272 CHECK_EQ(true, R.code->IsGapAt(0)); // Label
273 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap 273 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
274 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 274 CHECK_EQ(false, R.code->IsGapAt(2)); // i0
275 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap 275 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
276 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap 276 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
277 CHECK_EQ(false, R.code->IsGapAt(5)); // g 277 CHECK_EQ(false, R.code->IsGapAt(5)); // g
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 CHECK_EQ(inputs[z], m->InputAt(z)); 341 CHECK_EQ(inputs[z], m->InputAt(z));
342 } 342 }
343 343
344 for (size_t z = 0; z < k; z++) { 344 for (size_t z = 0; z < k; z++) {
345 CHECK_EQ(temps[z], m->TempAt(z)); 345 CHECK_EQ(temps[z], m->TempAt(z));
346 } 346 }
347 } 347 }
348 } 348 }
349 } 349 }
350 } 350 }
OLDNEW
« no previous file with comments | « src/zone-containers.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698