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

Unified Diff: test/cctest/compiler/compiler/test-instruction.cc

Issue 423313004: Remove accidental duplication in cctest suite. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: test/cctest/compiler/compiler/test-instruction.cc
diff --git a/test/cctest/compiler/compiler/test-instruction.cc b/test/cctest/compiler/compiler/test-instruction.cc
deleted file mode 100644
index c16e1505eb7a59e29e7aa7986839110a08c95d74..0000000000000000000000000000000000000000
--- a/test/cctest/compiler/compiler/test-instruction.cc
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "src/v8.h"
-#include "test/cctest/cctest.h"
-
-#include "src/compiler/code-generator.h"
-#include "src/compiler/common-operator.h"
-#include "src/compiler/graph.h"
-#include "src/compiler/instruction.h"
-#include "src/compiler/machine-operator.h"
-#include "src/compiler/node.h"
-#include "src/compiler/operator.h"
-#include "src/compiler/schedule.h"
-#include "src/compiler/scheduler.h"
-#include "src/lithium.h"
-
-using namespace v8::internal;
-using namespace v8::internal::compiler;
-
-typedef v8::internal::compiler::Instruction TestInstr;
-typedef v8::internal::compiler::InstructionSequence TestInstrSeq;
-
-// A testing helper for the register code abstraction.
-class InstructionTester : public HandleAndZoneScope {
- public: // We're all friends here.
- explicit InstructionTester()
- : isolate(main_isolate()),
- graph(zone()),
- schedule(zone()),
- info(static_cast<HydrogenCodeStub*>(NULL), main_isolate()),
- linkage(&info),
- common(zone()),
- machine(zone(), kMachineWord32),
- code(NULL) {}
-
- Isolate* isolate;
- Graph graph;
- Schedule schedule;
- CompilationInfoWithZone info;
- Linkage linkage;
- CommonOperatorBuilder common;
- MachineOperatorBuilder machine;
- TestInstrSeq* code;
-
- Zone* zone() { return main_zone(); }
-
- void allocCode() {
- if (schedule.rpo_order()->size() == 0) {
- // Compute the RPO order.
- Scheduler scheduler(zone(), &graph, &schedule);
- scheduler.ComputeSpecialRPO();
- ASSERT(schedule.rpo_order()->size() > 0);
- }
- code = new TestInstrSeq(&linkage, &graph, &schedule);
- }
-
- Node* Int32Constant(int32_t val) {
- Node* node = graph.NewNode(common.Int32Constant(val));
- schedule.AddNode(schedule.entry(), node);
- return node;
- }
-
- Node* Float64Constant(double val) {
- Node* node = graph.NewNode(common.Float64Constant(val));
- schedule.AddNode(schedule.entry(), node);
- return node;
- }
-
- Node* Parameter(int32_t which) {
- Node* node = graph.NewNode(common.Parameter(which));
- schedule.AddNode(schedule.entry(), node);
- return node;
- }
-
- Node* NewNode(BasicBlock* block) {
- Node* node = graph.NewNode(common.Int32Constant(111));
- schedule.AddNode(block, node);
- return node;
- }
-
- int NewInstr(BasicBlock* block) {
- InstructionCode opcode = static_cast<InstructionCode>(110);
- TestInstr* instr = TestInstr::New(zone(), opcode);
- return code->AddInstruction(instr, block);
- }
-
- UnallocatedOperand* NewUnallocated(int vreg) {
- UnallocatedOperand* unallocated =
- new (zone()) UnallocatedOperand(UnallocatedOperand::ANY);
- unallocated->set_virtual_register(vreg);
- return unallocated;
- }
-};
-
-
-TEST(InstructionBasic) {
- InstructionTester R;
-
- for (int i = 0; i < 10; i++) {
- R.Int32Constant(i); // Add some nodes to the graph.
- }
-
- BasicBlock* last = R.schedule.entry();
- for (int i = 0; i < 5; i++) {
- BasicBlock* block = R.schedule.NewBasicBlock();
- R.schedule.AddGoto(last, block);
- last = block;
- }
-
- R.allocCode();
-
- CHECK_EQ(R.graph.NodeCount(), R.code->ValueCount());
-
- BasicBlockVector* blocks = R.schedule.rpo_order();
- CHECK_EQ(static_cast<int>(blocks->size()), R.code->BasicBlockCount());
-
- int index = 0;
- for (BasicBlockVectorIter i = blocks->begin(); i != blocks->end();
- i++, index++) {
- BasicBlock* block = *i;
- CHECK_EQ(block, R.code->BlockAt(index));
- CHECK_EQ(-1, R.code->GetLoopEnd(block));
- }
-}
-
-
-TEST(InstructionGetBasicBlock) {
- InstructionTester R;
-
- BasicBlock* b0 = R.schedule.entry();
- BasicBlock* b1 = R.schedule.NewBasicBlock();
- BasicBlock* b2 = R.schedule.NewBasicBlock();
- BasicBlock* b3 = R.schedule.exit();
-
- R.schedule.AddGoto(b0, b1);
- R.schedule.AddGoto(b1, b2);
- R.schedule.AddGoto(b2, b3);
-
- R.allocCode();
-
- R.code->StartBlock(b0);
- int i0 = R.NewInstr(b0);
- int i1 = R.NewInstr(b0);
- R.code->EndBlock(b0);
- R.code->StartBlock(b1);
- int i2 = R.NewInstr(b1);
- int i3 = R.NewInstr(b1);
- int i4 = R.NewInstr(b1);
- int i5 = R.NewInstr(b1);
- R.code->EndBlock(b1);
- R.code->StartBlock(b2);
- int i6 = R.NewInstr(b2);
- int i7 = R.NewInstr(b2);
- int i8 = R.NewInstr(b2);
- R.code->EndBlock(b2);
- R.code->StartBlock(b3);
- R.code->EndBlock(b3);
-
- CHECK_EQ(b0, R.code->GetBasicBlock(i0));
- CHECK_EQ(b0, R.code->GetBasicBlock(i1));
-
- CHECK_EQ(b1, R.code->GetBasicBlock(i2));
- CHECK_EQ(b1, R.code->GetBasicBlock(i3));
- CHECK_EQ(b1, R.code->GetBasicBlock(i4));
- CHECK_EQ(b1, R.code->GetBasicBlock(i5));
-
- CHECK_EQ(b2, R.code->GetBasicBlock(i6));
- CHECK_EQ(b2, R.code->GetBasicBlock(i7));
- CHECK_EQ(b2, R.code->GetBasicBlock(i8));
-
- CHECK_EQ(b0, R.code->GetBasicBlock(b0->first_instruction_index()));
- CHECK_EQ(b0, R.code->GetBasicBlock(b0->last_instruction_index()));
-
- CHECK_EQ(b1, R.code->GetBasicBlock(b1->first_instruction_index()));
- CHECK_EQ(b1, R.code->GetBasicBlock(b1->last_instruction_index()));
-
- CHECK_EQ(b2, R.code->GetBasicBlock(b2->first_instruction_index()));
- CHECK_EQ(b2, R.code->GetBasicBlock(b2->last_instruction_index()));
-
- CHECK_EQ(b3, R.code->GetBasicBlock(b3->first_instruction_index()));
- CHECK_EQ(b3, R.code->GetBasicBlock(b3->last_instruction_index()));
-}
-
-
-TEST(InstructionIsGapAt) {
- InstructionTester R;
-
- BasicBlock* b0 = R.schedule.entry();
- R.schedule.AddReturn(b0, R.Int32Constant(1));
-
- R.allocCode();
- TestInstr* i0 = TestInstr::New(R.zone(), 100);
- TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
- R.code->StartBlock(b0);
- R.code->AddInstruction(i0, b0);
- R.code->AddInstruction(g, b0);
- R.code->EndBlock(b0);
-
- CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
-
- CHECK_EQ(true, R.code->IsGapAt(0)); // Label
- CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(2)); // i0
- CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
- CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(5)); // g
-}
-
-
-TEST(InstructionIsGapAt2) {
- InstructionTester R;
-
- BasicBlock* b0 = R.schedule.entry();
- BasicBlock* b1 = R.schedule.exit();
- R.schedule.AddGoto(b0, b1);
- R.schedule.AddReturn(b1, R.Int32Constant(1));
-
- R.allocCode();
- TestInstr* i0 = TestInstr::New(R.zone(), 100);
- TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
- R.code->StartBlock(b0);
- R.code->AddInstruction(i0, b0);
- R.code->AddInstruction(g, b0);
- R.code->EndBlock(b0);
-
- TestInstr* i1 = TestInstr::New(R.zone(), 102);
- TestInstr* g1 = TestInstr::New(R.zone(), 104)->MarkAsControl();
- R.code->StartBlock(b1);
- R.code->AddInstruction(i1, b1);
- R.code->AddInstruction(g1, b1);
- R.code->EndBlock(b1);
-
- CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
-
- CHECK_EQ(true, R.code->IsGapAt(0)); // Label
- CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(2)); // i0
- CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
- CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(5)); // g
-
- CHECK_EQ(true, R.code->InstructionAt(6)->IsBlockStart());
-
- CHECK_EQ(true, R.code->IsGapAt(6)); // Label
- CHECK_EQ(true, R.code->IsGapAt(7)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(8)); // i1
- CHECK_EQ(true, R.code->IsGapAt(9)); // Gap
- CHECK_EQ(true, R.code->IsGapAt(10)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(11)); // g1
-}
-
-
-TEST(InstructionAddGapMove) {
- InstructionTester R;
-
- BasicBlock* b0 = R.schedule.entry();
- R.schedule.AddReturn(b0, R.Int32Constant(1));
-
- R.allocCode();
- TestInstr* i0 = TestInstr::New(R.zone(), 100);
- TestInstr* g = TestInstr::New(R.zone(), 103)->MarkAsControl();
- R.code->StartBlock(b0);
- R.code->AddInstruction(i0, b0);
- R.code->AddInstruction(g, b0);
- R.code->EndBlock(b0);
-
- CHECK_EQ(true, R.code->InstructionAt(0)->IsBlockStart());
-
- CHECK_EQ(true, R.code->IsGapAt(0)); // Label
- CHECK_EQ(true, R.code->IsGapAt(1)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(2)); // i0
- CHECK_EQ(true, R.code->IsGapAt(3)); // Gap
- CHECK_EQ(true, R.code->IsGapAt(4)); // Gap
- CHECK_EQ(false, R.code->IsGapAt(5)); // g
-
- int indexes[] = {0, 1, 3, 4, -1};
- for (int i = 0; indexes[i] >= 0; i++) {
- int index = indexes[i];
-
- UnallocatedOperand* op1 = R.NewUnallocated(index + 6);
- UnallocatedOperand* op2 = R.NewUnallocated(index + 12);
-
- R.code->AddGapMove(index, op1, op2);
- GapInstruction* gap = R.code->GapAt(index);
- ParallelMove* move = gap->GetParallelMove(GapInstruction::START);
- CHECK_NE(NULL, move);
- const ZoneList<MoveOperands>* move_operands = move->move_operands();
- CHECK_EQ(1, move_operands->length());
- MoveOperands* cur = &move_operands->at(0);
- CHECK_EQ(op1, cur->source());
- CHECK_EQ(op2, cur->destination());
- }
-}
-
-
-TEST(InstructionOperands) {
- Zone zone(CcTest::InitIsolateOnce());
-
- {
- TestInstr* i = TestInstr::New(&zone, 101);
- CHECK_EQ(0, i->OutputCount());
- CHECK_EQ(0, i->InputCount());
- CHECK_EQ(0, i->TempCount());
- }
-
- InstructionOperand* outputs[] = {
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER)};
-
- InstructionOperand* inputs[] = {
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER)};
-
- InstructionOperand* temps[] = {
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER),
- new (&zone) UnallocatedOperand(UnallocatedOperand::MUST_HAVE_REGISTER)};
-
- for (size_t i = 0; i < ARRAY_SIZE(outputs); i++) {
- for (size_t j = 0; j < ARRAY_SIZE(inputs); j++) {
- for (size_t k = 0; k < ARRAY_SIZE(temps); k++) {
- TestInstr* m =
- TestInstr::New(&zone, 101, i, outputs, j, inputs, k, temps);
- CHECK(i == m->OutputCount());
- CHECK(j == m->InputCount());
- CHECK(k == m->TempCount());
-
- for (size_t z = 0; z < i; z++) {
- CHECK_EQ(outputs[z], m->OutputAt(z));
- }
-
- for (size_t z = 0; z < j; z++) {
- CHECK_EQ(inputs[z], m->InputAt(z));
- }
-
- for (size_t z = 0; z < k; z++) {
- CHECK_EQ(temps[z], m->TempAt(z));
- }
- }
- }
- }
-}
« no previous file with comments | « test/cctest/compiler/compiler/test-graph-reducer.cc ('k') | test/cctest/compiler/compiler/test-instruction-selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698