OLD | NEW |
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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 BasicBlock* b1 = R.schedule.NewBasicBlock(); | 151 BasicBlock* b1 = R.schedule.NewBasicBlock(); |
152 BasicBlock* b2 = R.schedule.NewBasicBlock(); | 152 BasicBlock* b2 = R.schedule.NewBasicBlock(); |
153 BasicBlock* b3 = R.schedule.end(); | 153 BasicBlock* b3 = R.schedule.end(); |
154 | 154 |
155 R.schedule.AddGoto(b0, b1); | 155 R.schedule.AddGoto(b0, b1); |
156 R.schedule.AddGoto(b1, b2); | 156 R.schedule.AddGoto(b1, b2); |
157 R.schedule.AddGoto(b2, b3); | 157 R.schedule.AddGoto(b2, b3); |
158 | 158 |
159 R.allocCode(); | 159 R.allocCode(); |
160 | 160 |
161 R.code->StartBlock(b0); | 161 R.code->StartBlock(b0->GetRpoNumber()); |
162 int i0 = R.NewInstr(); | 162 int i0 = R.NewInstr(); |
163 int i1 = R.NewInstr(); | 163 int i1 = R.NewInstr(); |
164 R.code->EndBlock(b0); | 164 R.code->EndBlock(b0->GetRpoNumber()); |
165 R.code->StartBlock(b1); | 165 R.code->StartBlock(b1->GetRpoNumber()); |
166 int i2 = R.NewInstr(); | 166 int i2 = R.NewInstr(); |
167 int i3 = R.NewInstr(); | 167 int i3 = R.NewInstr(); |
168 int i4 = R.NewInstr(); | 168 int i4 = R.NewInstr(); |
169 int i5 = R.NewInstr(); | 169 int i5 = R.NewInstr(); |
170 R.code->EndBlock(b1); | 170 R.code->EndBlock(b1->GetRpoNumber()); |
171 R.code->StartBlock(b2); | 171 R.code->StartBlock(b2->GetRpoNumber()); |
172 int i6 = R.NewInstr(); | 172 int i6 = R.NewInstr(); |
173 int i7 = R.NewInstr(); | 173 int i7 = R.NewInstr(); |
174 int i8 = R.NewInstr(); | 174 int i8 = R.NewInstr(); |
175 R.code->EndBlock(b2); | 175 R.code->EndBlock(b2->GetRpoNumber()); |
176 R.code->StartBlock(b3); | 176 R.code->StartBlock(b3->GetRpoNumber()); |
177 R.code->EndBlock(b3); | 177 R.code->EndBlock(b3->GetRpoNumber()); |
178 | 178 |
179 CHECK_EQ(b0, R.GetBasicBlock(i0)); | 179 CHECK_EQ(b0, R.GetBasicBlock(i0)); |
180 CHECK_EQ(b0, R.GetBasicBlock(i1)); | 180 CHECK_EQ(b0, R.GetBasicBlock(i1)); |
181 | 181 |
182 CHECK_EQ(b1, R.GetBasicBlock(i2)); | 182 CHECK_EQ(b1, R.GetBasicBlock(i2)); |
183 CHECK_EQ(b1, R.GetBasicBlock(i3)); | 183 CHECK_EQ(b1, R.GetBasicBlock(i3)); |
184 CHECK_EQ(b1, R.GetBasicBlock(i4)); | 184 CHECK_EQ(b1, R.GetBasicBlock(i4)); |
185 CHECK_EQ(b1, R.GetBasicBlock(i5)); | 185 CHECK_EQ(b1, R.GetBasicBlock(i5)); |
186 | 186 |
187 CHECK_EQ(b2, R.GetBasicBlock(i6)); | 187 CHECK_EQ(b2, R.GetBasicBlock(i6)); |
(...skipping 16 matching lines...) Expand all Loading... |
204 | 204 |
205 TEST(InstructionIsGapAt) { | 205 TEST(InstructionIsGapAt) { |
206 InstructionTester R; | 206 InstructionTester R; |
207 | 207 |
208 BasicBlock* b0 = R.schedule.start(); | 208 BasicBlock* b0 = R.schedule.start(); |
209 R.schedule.AddReturn(b0, R.Int32Constant(1)); | 209 R.schedule.AddReturn(b0, R.Int32Constant(1)); |
210 | 210 |
211 R.allocCode(); | 211 R.allocCode(); |
212 TestInstr* i0 = TestInstr::New(R.zone(), 100); | 212 TestInstr* i0 = TestInstr::New(R.zone(), 100); |
213 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); | 213 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); |
214 R.code->StartBlock(b0); | 214 R.code->StartBlock(b0->GetRpoNumber()); |
215 R.code->AddInstruction(i0); | 215 R.code->AddInstruction(i0); |
216 R.code->AddInstruction(g); | 216 R.code->AddInstruction(g); |
217 R.code->EndBlock(b0); | 217 R.code->EndBlock(b0->GetRpoNumber()); |
218 | 218 |
219 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); | 219 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); |
220 | 220 |
221 CHECK_EQ(true, R.code->IsGapAt(0)); // Label | 221 CHECK_EQ(true, R.code->IsGapAt(0)); // Label |
222 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap | 222 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap |
223 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 | 223 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 |
224 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap | 224 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap |
225 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap | 225 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap |
226 CHECK_EQ(false, R.code->IsGapAt(5)); // g | 226 CHECK_EQ(false, R.code->IsGapAt(5)); // g |
227 } | 227 } |
228 | 228 |
229 | 229 |
230 TEST(InstructionIsGapAt2) { | 230 TEST(InstructionIsGapAt2) { |
231 InstructionTester R; | 231 InstructionTester R; |
232 | 232 |
233 BasicBlock* b0 = R.schedule.start(); | 233 BasicBlock* b0 = R.schedule.start(); |
234 BasicBlock* b1 = R.schedule.end(); | 234 BasicBlock* b1 = R.schedule.end(); |
235 R.schedule.AddGoto(b0, b1); | 235 R.schedule.AddGoto(b0, b1); |
236 R.schedule.AddReturn(b1, R.Int32Constant(1)); | 236 R.schedule.AddReturn(b1, R.Int32Constant(1)); |
237 | 237 |
238 R.allocCode(); | 238 R.allocCode(); |
239 TestInstr* i0 = TestInstr::New(R.zone(), 100); | 239 TestInstr* i0 = TestInstr::New(R.zone(), 100); |
240 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); | 240 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); |
241 R.code->StartBlock(b0); | 241 R.code->StartBlock(b0->GetRpoNumber()); |
242 R.code->AddInstruction(i0); | 242 R.code->AddInstruction(i0); |
243 R.code->AddInstruction(g); | 243 R.code->AddInstruction(g); |
244 R.code->EndBlock(b0); | 244 R.code->EndBlock(b0->GetRpoNumber()); |
245 | 245 |
246 TestInstr* i1 = TestInstr::New(R.zone(), 102); | 246 TestInstr* i1 = TestInstr::New(R.zone(), 102); |
247 TestInstr* g1 = TestInstr::New(R.zone(), 104)->MarkAsControl(); | 247 TestInstr* g1 = TestInstr::New(R.zone(), 104)->MarkAsControl(); |
248 R.code->StartBlock(b1); | 248 R.code->StartBlock(b1->GetRpoNumber()); |
249 R.code->AddInstruction(i1); | 249 R.code->AddInstruction(i1); |
250 R.code->AddInstruction(g1); | 250 R.code->AddInstruction(g1); |
251 R.code->EndBlock(b1); | 251 R.code->EndBlock(b1->GetRpoNumber()); |
252 | 252 |
253 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); | 253 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); |
254 | 254 |
255 CHECK_EQ(true, R.code->IsGapAt(0)); // Label | 255 CHECK_EQ(true, R.code->IsGapAt(0)); // Label |
256 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap | 256 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap |
257 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 | 257 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 |
258 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap | 258 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap |
259 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap | 259 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap |
260 CHECK_EQ(false, R.code->IsGapAt(5)); // g | 260 CHECK_EQ(false, R.code->IsGapAt(5)); // g |
261 | 261 |
(...skipping 10 matching lines...) Expand all Loading... |
272 | 272 |
273 TEST(InstructionAddGapMove) { | 273 TEST(InstructionAddGapMove) { |
274 InstructionTester R; | 274 InstructionTester R; |
275 | 275 |
276 BasicBlock* b0 = R.schedule.start(); | 276 BasicBlock* b0 = R.schedule.start(); |
277 R.schedule.AddReturn(b0, R.Int32Constant(1)); | 277 R.schedule.AddReturn(b0, R.Int32Constant(1)); |
278 | 278 |
279 R.allocCode(); | 279 R.allocCode(); |
280 TestInstr* i0 = TestInstr::New(R.zone(), 100); | 280 TestInstr* i0 = TestInstr::New(R.zone(), 100); |
281 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); | 281 TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl(); |
282 R.code->StartBlock(b0); | 282 R.code->StartBlock(b0->GetRpoNumber()); |
283 R.code->AddInstruction(i0); | 283 R.code->AddInstruction(i0); |
284 R.code->AddInstruction(g); | 284 R.code->AddInstruction(g); |
285 R.code->EndBlock(b0); | 285 R.code->EndBlock(b0->GetRpoNumber()); |
286 | 286 |
287 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); | 287 CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart()); |
288 | 288 |
289 CHECK_EQ(true, R.code->IsGapAt(0)); // Label | 289 CHECK_EQ(true, R.code->IsGapAt(0)); // Label |
290 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap | 290 CHECK_EQ(true, R.code->IsGapAt(1)); // Gap |
291 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 | 291 CHECK_EQ(false, R.code->IsGapAt(2)); // i0 |
292 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap | 292 CHECK_EQ(true, R.code->IsGapAt(3)); // Gap |
293 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap | 293 CHECK_EQ(true, R.code->IsGapAt(4)); // Gap |
294 CHECK_EQ(false, R.code->IsGapAt(5)); // g | 294 CHECK_EQ(false, R.code->IsGapAt(5)); // g |
295 | 295 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 CHECK_EQ(inputs[z], m->InputAt(z)); | 358 CHECK_EQ(inputs[z], m->InputAt(z)); |
359 } | 359 } |
360 | 360 |
361 for (size_t z = 0; z < k; z++) { | 361 for (size_t z = 0; z < k; z++) { |
362 CHECK_EQ(temps[z], m->TempAt(z)); | 362 CHECK_EQ(temps[z], m->TempAt(z)); |
363 } | 363 } |
364 } | 364 } |
365 } | 365 } |
366 } | 366 } |
367 } | 367 } |
OLD | NEW |